Как очистить постоянные переменные, сохраняя точки останова в MATLAB?

Есть ли способ очистить все постоянные переменные в функциях MATLAB, сохраняя точки останова в соответствующих файлах функций?

clear all;

и

clear functions;

оба убивают точки останова.

Ответы

Ответ 1

К сожалению, очистка постоянных переменных также очищает точки останова, но есть обходной путь.

После установки точек останова, которые вы хотите сохранить, используйте функцию dbstatus, чтобы получить структуру, содержащую эти точки останова, а затем сохраните эту структуру в файле MAT. После очистки переменных вы можете перезагрузить эти переменные, загрузив файл MAT и используя dbstop. Ниже приведен пример выполнения этой последовательности операций:

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

Ответ 2

Создав решения RTBarnard и Jonas, я придумал script, который позволяет избежать необходимости сохранения и загрузки из файла. Обратите внимание, однако, что это не очищает классы, такие как решение 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;

Этот script и некоторые другие утилиты Matlab находятся на Github здесь.

Ответ 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')

Ответ 4

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

Скопировать в файл функции (пример myclearclasses) Таким образом, нет необходимости в временном файле .mat.

Ответ 5

Это просто, вы должны использовать * как regexp для поиска всех переменных. Он очистит всю рабочую область, и точки останова будут существовать.

clear *;

Ответ 6

Я придумал быстрое решение для этого, используя настройки и ответы других:

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

Преимущество этого подхода заключается в том, что он очень чистый (т.е. не временный файл) и очищает все.