2010-03-25 26 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')); 

這種方法的優點是它是非常乾淨的(即沒有臨時文件),並清除一切。