En Matlab, ¿es posible finalizar un script, pero guardar todas sus variables internas en el espacio de trabajo?

Estoy ejecutando un script, pero me está tomando demasiado tiempo, así que quiero terminar el script. Sin embargo, ha calculado una gran cantidad de datos que idealmente no quisiera descartar. ¿Existe una alternativa a ctrl-C con la que guarde las variables de función interna en el espacio de trabajo?

Idealmente, estoy buscando un atajo de teclado de Matlab como ctrl-C , pero si eso realmente no se puede hacer, tal vez haya una manera de hacerlo en el script de mi función. ¿Alguna idea de cómo permitir que mi script reaccione a ctrl-C también, o tal vez a un elemento GUI que puedo cancelar y luego guardo las variables a través de mi script?

Algunas preguntas similares que he encontrado, pero que no responden a mi pregunta:

cerrar / pausa

Terminar

Pregunta diferente, respuesta similar:

dbstop

EDITAR:

Esta pregunta es diferente porque el problema que asker tiene es diferente: quieren saber dónde está el error, que en mi caso ya lo dice Matlab. Solo quiero mantener todos los datos de la memoria operativa cuando ocurra.

Versiones MATLAB 2016a y posteriores

Si está utilizando versiones posteriores a 2016a de Matlab, en realidad hay un botón de pausa que aparece cuando ejecuta el script (como se describe en @pedre). Esto le permite detener la secuencia de comandos, inspeccionar las variables y luego reanudarlas.

Asegúrese de revisar la siguiente sección ya que esto puede ser conveniente.

Versiones anteriores de MATLAB

En realidad, el truco es usar dbstop if error .

Primero use esto, luego ejecute su script. Una vez que introduce un error (por ejemplo, con Ctrl + C ), entonces tiene la oportunidad de inspeccionar / guardar sus espacios de trabajo manualmente.

No podrá reanudar el script.

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

enter image description here

Un colega me mostró una forma alternativa de incorporar esto en mi función, adjuntando un comando save() a la cancelación de una waitbar de waitbar como esta:

 %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