2010-03-25 8 views

Respuesta

15

Desafortunadamente, borrar las variables persistentes también borra los puntos de interrupción, pero hay una solución.

Después de establecer los puntos de interrupción que desea conservar, use la función dbstatus para obtener una estructura que contenga esos puntos de interrupción y luego guarde esa estructura en un archivo MAT. Después de borrar las variables, puede volver a cargar esas variables cargando el archivo MAT y usando dbstop. A continuación se presenta un ejemplo de realización de esta secuencia de operaciones:

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

Tenga en cuenta que hasta Matlab 2009b (creo), donde arreglaron el error, los puntos de interrupción cargados no serían visibles en el editor, pero estaban allí. – Jonas

+0

@RTBarnard gracias por esa solución. Desafortunadamente no funciona en las clases @ -folder porque los archivos donde están los puntos de corte, deben estar en la ruta de búsqueda, de la cual se excluyen las carpetas @. – Philipp

+0

@Jonas my R2009b todavía tiene el error – Philipp

3

Si hay datos en @directories, puede seguir utilizando el método que 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

construcción de RTBarnard de Jonas de soluciones, me se le ocurrió una secuencia de comandos que evita la necesidad de guardar y cargar desde un archivo. Tenga en cuenta, sin embargo, que esto no borra las clases como la solución de Jonas. También cierro todas las cifras, ya que eso es lo que normalmente quiero hacer cuando borro todo. Aquí 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; 

Esta secuencia de comandos y otras utilidades de MATLAB son here en Github.

+0

Mucho mejor para mantener los puntos de interrupción en la memoria en lugar de escribir un archivo. – Philipp

+0

Esta sería mi respuesta preferida. Gracias por el guion! –

+0

@ndj No hay problema. Todavía uso este script todo el tiempo cuando trabajo en Matlab.El único otro que he escrito que se acerca mucho en su utilidad es aquel que exporta figuras a vectores archivos pdf con un tamaño específico y con todo el espacio en blanco extra recortado. Y ese solo es útil porque uso mucho LaTeX. – Brandon

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

a copiar en un archivo de función (ejemplo myclearclasses) De esta manera no hay necesidad de archivo .mat temporal.

0

Es simple, debe usar * como expresiones regulares para encontrar todas las variables. Va a limpiar todo el espacio de trabajo y los puntos de interrupción existirán.

clear *; 
0

me ocurrió una solución rápida para este uso preferences y respuestas de los otros:

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

La ventaja de este enfoque es que es muy limpio (es decir, no hay ningún archivo temporal) y borra todo.

Cuestiones relacionadas