Comment effacer les variables persistantes tout en gardant points d'arrêt dans Matlab?

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

  •  22-09-2019
  •  | 
  •  

Question

Y at-il un moyen d'effacer toutes les variables persistantes dans les fonctions MATLAB®, tout en conservant les points d'arrêt dans les fichiers de la fonction correspondante?

clear all;

et

clear functions;

à la fois tuer les points d'arrêt.

Était-ce utile?

La solution

Malheureusement, la compensation des variables persistantes efface également les points d'arrêt, mais il existe une solution.

Après avoir défini les points d'arrêt que vous souhaitez conserver, utiliser la fonction dbstatus pour obtenir une structure contenant les points d'arrêt et puis enregistrez cette structure dans un fichier MAT. Après les variables de compensation, vous pouvez alors recharger les variables en chargeant le fichier MAT et en utilisant dbstop. Voici un exemple d'exécution de cette séquence d'opérations:

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

Autres conseils

Bâtiment à partir des solutions de RTBarnard et Jonas, je suis venu avec un script qui évite la nécessité de sauvegarder et charger à partir d'un fichier. Notez, cependant, que cela ne voit pas clairement les classes comme la solution de Jonas. Je ferme également tous les chiffres, puisque c'est ce que je veux faire en général quand tout compensation. Ici, il 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;

Ce script et d'autres utilitaires Matlab sont sur Github .

S'il y a des données dans @directories, vous pouvez toujours utiliser la méthode RTBarnard propose

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

Pour copier dans un fichier de fonction (par exemple myclearclasses) De cette façon, pas besoin de fichier .mat temporaire.

Il est simple, vous devez utiliser * comme regexp pour trouver toutes les variables. Il va nettoyer l'espace de travail entier et breakpoints'll existe.

clear *;

Je suis venu avec une solution rapide pour cela en utilisant les réponses des autres:

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

L'avantage de cette approche est qu'il est très propre (à savoir pas de fichier temporaire) et efface tout.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top