Como limpar variáveis ​​persistentes enquanto mantém pontos de interrupção no MATLAB?

StackOverflow https://stackoverflow.com/questions/2514911

  •  22-09-2019
  •  | 
  •  

Pergunta

Existe uma maneira de limpar todas as variáveis ​​persistentes nas funções MATLAB, mantendo os pontos de interrupção nos arquivos de função correspondentes?

clear all;

e

clear functions;

ambos matam os pontos de interrupção.

Foi útil?

Solução

Infelizmente, limpar variáveis ​​persistentes também limpa pontos de interrupção, mas há uma solução alternativa.

Depois de definir os pontos de interrupção que deseja manter, use o comando dbstatus função para obter uma estrutura contendo esses pontos de interrupção e, em seguida, salvar essa estrutura em um arquivo MAT.Depois de limpar as variáveis, você poderá recarregá-las carregando o arquivo MAT e usando dbstop.A seguir está um exemplo de execução desta sequência de operações:

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

Outras dicas

Com base nas soluções da RTBernard e do Jonas, criei um script que evita a necessidade de salvar e carregar de um arquivo.Observe, entretanto, que isso não limpa as classes como a solução de Jonas.Também fecho todos os números, pois é isso que normalmente quero fazer ao limpar tudo.Aqui está:

% 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;

Este script e alguns outros utilitários Matlab estão no Github aqui.

Se houver dados em @directories, você ainda poderá usar o método que RTBarnard propõe

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')
s=dbstatus; % keep breakpoints
evalin('base','clear classes')
dbstop(s);

Para ser copiado em um arquivo de função (exemplo myclearclasses) dessa maneira, não há necessidade de arquivo .mat temporário.

É simples, você deve usar * como regexp para encontrar todas as variáveis.Isso limpará todo o espaço de trabalho e existirão pontos de interrupção.

clear *;

Eu descobri uma solução rápida para isso usando preferências e as respostas dos outros:

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

A vantagem desta abordagem é que ela é muito limpa (ou seja,nenhum arquivo temporário) e limpa tudo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top