Как очистить постоянные переменные, сохраняя точки останова в 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'));
Преимущество этого подхода заключается в том, что он очень чистый (т.е. не временный файл) и очищает все.