two matlab save workspace keyboardinterrupt

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:

close/pause

terminate

Pregunta diferente, respuesta similar:

dbstop

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.


Solo tiene que hacer clic dentro de su secuencia de comandos para poder abrir la página del Editor , y luego presionar pausa y ver todos los valores internos allí.


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