如何在MATLAB中保留断点的同时清除持久变量?

时间:2010-03-25 11:12:28

标签: matlab persistent

有没有办法清除MATLAB函数中的所有持久变量,同时将断点保留在相应的函数文件中?

clear all;

clear functions;

都杀掉了断点。

6 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:10)

从RTBarnard和Jonas的解决方案构建,我想出了一个避免需要从文件中保存和加载的脚本。但请注意,这并没有像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

答案 2 :(得分: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')

答案 3 :(得分:1)

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

要复制到函数文件中(例如myclearclasses) 这种方式不需要临时的.mat文件。

答案 4 :(得分:0)

很简单,你应该使用*作为regexp来查找所有变量。它将清理整个工作空间和断点并存在。

clear *;

答案 5 :(得分:0)

我使用preferences和其他人提出了一个快速解决方案。答案:

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

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