2010-03-25 4 views

risposta

15

Sfortunatamente, la cancellazione delle variabili persistenti cancella anche i breakpoint, ma c'è una soluzione alternativa.

Dopo aver impostato i punti di interruzione che si desidera conservare, utilizzare la funzione dbstatus per ottenere una struttura contenente tali punti di interruzione e quindi salvare tale struttura in un file MAT. Dopo aver cancellato le variabili, puoi ricaricare le variabili caricando il file MAT e utilizzando dbstop. Di seguito è riportato un esempio di esecuzione di questa sequenza di operazioni:

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

Si noti che fino a Matlab 2009b (credo), dove hanno corretto il bug, i punti di interruzione caricati non sarebbero visibili nell'editor, eppure erano lì. – Jonas

+0

@RTBarnard ringrazia per questa soluzione. Sfortunatamente non funziona nelle classi @ -folder perché i file in cui si trovano i punti di interruzione devono trovarsi sul percorso di ricerca da cui sono esclusi i caratteri @. – Philipp

+0

@Jonas il mio R2009b ha ancora l'errore – Philipp

3

Se ci sono dati in @directories, è comunque possibile utilizzare il metodo che RTBarnard propone

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') 
10

costruzione da RTBarnard di e Jonas di soluzioni, mi è venuto fuori con uno script che evita la necessità di salvare e caricare da un file. Nota, tuttavia, che questo non chiarisce le classi come la soluzione di Jonas. Chiudo anche tutte le cifre, poiché è quello che in genere voglio fare quando svuoto tutto. Eccolo:

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

Questo script e alcune altre utilità Matlab sono su Github here.

+0

Molto meglio mantenere i punti di interruzione in memoria invece di scrivere un file. – Philipp

+0

Questa sarebbe la mia risposta preferita. Grazie per la sceneggiatura! –

+0

@ndj Nessun problema. Continuo a usare questo copione tutto il tempo quando lavoro in Matlab.L'unico altro che ho scritto che si avvicina all'utilità è quello che esporta figure in file PDF vettoriali con una dimensione specificata e con tutto lo spazio bianco extra ritagliato. E questo è utile solo perché uso molto LaTeX. – Brandon

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

essere copiati in un file di funzione (esempio myclearclasses) questo modo non è necessario per il file .mat temporaneo.

0

È semplice, si dovrebbe usare * come espressione regolare per trovare tutte le variabili. Pulirà tutto lo spazio di lavoro ei punti di interruzione esisteranno.

clear *; 
0

mi si avvicinò con una soluzione rapida per questo utilizzo preferences e le risposte degli altri:

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

Il vantaggio di questo approccio è che è molto pulito (vale a dire senza file temporaneo) e cancella tutto.

Problemi correlati