2010-03-25 24 views

回答

15

不幸的是,清除持久变量也会清除断点,但有一个解决方法。

在设置要保留的断点后,使用dbstatus函数获取包含这些断点的结构,然后将该结构保存到MAT文件。清除变量后,您可以通过加载MAT文件并使用dbstop来重新加载这些变量。以下是执行这样的操作顺序的一个例子:

s=dbstatus; 
save('myBreakpoints.mat', 's'); 
clear all 
load('myBreakpoints.mat'); 
dbstop(s); 
+1

请注意,直到Matlab 2009b(我认为),他们修复了这个错误之后,加载的断点在编辑器中不可见 - 但它们在那里。 – Jonas 2010-03-25 11:58:20

+0

@RTBarnard感谢您的解决方案。不幸的是,它在@ -folder类中不起作用,因为断点所在的文件必须位于搜索路径中,从中排除了@ -folders。 – Philipp 2010-03-25 14:41:49

+0

@Jonas我的R2009b仍然有bug – Philipp 2010-03-25 14:43:04

3

如果在@directories数据,你仍然可以使用方法RTBarnard提出

s=dbstatus('-completenames'); 
save('myBreakpoints.mat','s'); 
%# if you're clearing, you may as well just clear everything 
%# note that if there is stuff stored inside figures (e.g. as callbacks), not all of 
%# it may be removed, so you may have to 'close all' as well 
clear classes 
load('myBreakpoints.mat') 
dbstop(s); 

%# do some cleanup 
clear s 
delete('myBreakpoints.mat') 
10

建筑物的RTBarnard的和乔纳斯的解决方案,我想出了一个避免从文件保存和加载的脚本。但是,请注意,这并不能清除像Jonas解决方案这样的类。我也关闭了所有的数据,因为这是我通常在清除所有内容时要做的事情。那就是:

% Close all figures including those with hidden handles 
close all hidden; 

% Store all the currently set breakpoints in a variable 
temporaryBreakpointData=dbstatus('-completenames'); 

% Clear functions and their persistent variables (also clears breakpoints 
% set in functions) 
clear functions; 

% Restore the previously set breakpoints 
dbstop(temporaryBreakpointData); 

% Clear global variables 
clear global; 

% Clear variables (including the temporary one used to store breakpoints) 
clear variables; 

这个脚本和其他一些Matlab的工具是在Github here

+0

更好地保持在内存中的断点,而不是写一个文件。 – Philipp 2011-04-13 08:22:37

+0

这将是我的首选答案。谢谢你的脚本! – 2013-08-23 08:49:37

+0

@ndj没问题。在Matlab中工作时,我仍然一直使用这个脚本。我写的唯一一个接近于实用的方法是将数字导出为具有指定大小的矢量pdf文件,并裁剪掉所有额外的空白区域。而且这是唯一有用的,因为我使用了很多LaTeX。 – Brandon 2013-08-23 18:00:45

1
s=dbstatus; % keep breakpoints 
evalin('base','clear classes') 
dbstop(s); 

在函数的文件(例如myclearclasses) 这种方式不需要临时.MAT文件被复制。

0

很简单,您应该使用*作为正则表达式来查找所有变量。它会清理整个工作区,并且断点将会存在。

clear *; 
0

我想出了这个用preferences和别人的答案,一个快速的解决方案:

setpref('user', 'breakpointBackup', dbstatus('-completenames')); 
clear all; 
clear import; 
clear java; 
dbstop(getpref('user', 'breakpointBackup')); 

这种方法的优点是它是非常干净的(即没有临时文件),并清除一切。