two - En Matlab, ¿es posible terminar un script, pero guardar todas sus variables internas en el área de trabajo?
newline matlab title (3)
Estoy ejecutando un script, pero está tardando demasiado tiempo, por lo que quiero terminar el script. Sin embargo, ha calculado muchos datos que, idealmente, no querría tirar. ¿Existe una alternativa a ctrl-C
con la que guarda las variables de función internas en el área de trabajo?
Lo ideal es buscar un método abreviado de teclado de Matlab como ctrl-C
, pero si realmente no se puede hacer, tal vez haya una forma de hacerlo en el script de mi función. ¿Alguna idea de cómo dejar que mi script reaccione también a ctrl-C
, o tal vez un elemento GUI que pueda cancelar y luego guarde las variables a través de mi script?
Algunas preguntas similares que he encontrado, pero que no responden a mi pregunta:
Pregunta diferente, respuesta similar:
EDITAR:
Esta pregunta es diferente porque el problema que tiene el que pregunta es diferente: quieren saber dónde está el error, que en mi caso ya dice Matlab. Solo quiero mantener todos los datos de la memoria de trabajo cuando suceda.
Versiones MATLAB 2016a y posteriores.
Si está utilizando versiones posteriores de Matlab 2016a, en realidad hay un botón de pausa que aparece cuando ejecuta el script (como lo describe @pedre). Esto le permite pausar el script, inspeccionar variables y luego reanudarlas.
Asegúrese de revisar la siguiente sección ya que esto puede ser conveniente.
Versiones más antiguas de MATLAB
En realidad, el truco es usar dbstop if error
.
Primero usa esto, luego ejecuta tu script. Una vez que introduce un error (por ejemplo, con Ctrl + C ), tiene la oportunidad de inspeccionar / guardar sus áreas de trabajo manualmente.
No podrás reanudar el script.
Un colega me mostró una forma alternativa de incorporar esto en mi función, al adjuntar un comando save()
a la cancelación de una waitbar
de waitbar
modo:
%appoint emergency file location
emergencysave = char(inputdlg({''fill in here:''}, ''windowtitle'', 1, ''c:/defaultstringhere.mat''));
%or just emergencysave = ''c:/emergencysave.mat'';
%create some GUI element you can cancel
times = 10;
wbinfo = struct(''curlength'', {0.0});
wb = waitbar(wbinfo.curlength);
wbinfo.wb = wb;
%attach save() to cancelling
anyimportantvariable = [];
for i=1:times
anyimportantvariable = [anyimportantvariable, i^2];
wbinfo.curlength = i/times;
try
waitbar(wbinfo.curlength, wb)
catch
save(emergencysave, ''anyimportantvariable'');
return;
end