Как очистить постоянные переменные, сохраняя точки останова в MATLAB? - PullRequest
15 голосов
/ 25 марта 2010

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

clear all;

и

clear functions;

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

Ответы [ 6 ]

15 голосов
/ 25 марта 2010

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

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

s=dbstatus;
save('myBreakpoints.mat', 's');
clear all
load('myBreakpoints.mat');
dbstop(s);
10 голосов
/ 13 апреля 2011

Основываясь на решениях 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 здесь .

3 голосов
/ 25 марта 2010

Если в @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')
1 голос
/ 05 февраля 2013
s=dbstatus; % keep breakpoints
evalin('base','clear classes')
dbstop(s);

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

0 голосов
/ 13 мая 2015

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

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

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

0 голосов
/ 22 марта 2014

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

clear *;
...