Pregunta

Me gusta depuración en Matlab utilizando comandos. algunas preguntas:

  1. Si elige una pila, es posible saltar a una pila específica directamente en lugar de mover una pila tras otro utilizando dbup y dbdown?
  2. Después de saltar a una pila intermedia, si ejecuto algunos comandos, ¿por qué se auto vuelve a la más interna pila? ¿Puedo permanecer en la pila intermedia hasta que emita un comando para ir a otra pila?
¿Fue útil?

Solución

1) No desde el teclado. Si estás usando el editor y tienen la barra de herramientas Editor muestra, hay un menú desplegable "Pila" que le muestra toda la pila de llamadas, y puede saltar a un nivel arbitrario. Usted puede ser capaz de cortar un nivel n dbup / dbdown juntos mirando a lo que hay en ese desplegable, pero el control del depurador es muy difícil de secuencia de comandos de Matlab debido a la interacción del depurador y el código M que está utilizando para scripting .

2) Si emite un comando de la "K >>" depurador del sistema, cuando termina que debería devolver el nivel de la pila ha emitido desde, al igual que usted espera. ¿Todavía tiene el punto de interrupción establecido en el nivel inferior del código? Tal vez en realidad estás viendo un depurador secundaria "K >>" del sistema desde un punto de interrupción en la pila de llamadas anidadas. Puede tener múltiples contextos esencialmente depurador anidada.

Por ejemplo:

function f1
f2();
function f2()
f3();
function f3()
f4();
function f4()
disp('Hello world');

Si se lanza en el depurador como este, que va a golpear el punto de interrupción en la parte inferior de una pila de llamadas que a su vez se puso en marcha a partir de la sesión de depurador originales.

>> dbstop in f1 at 8
>> f1()
8   disp('Hello world');
K>> dbup
In workspace belonging to f1>f3 at 6
K>> dbup
In workspace belonging to f1>f2 at 4
K>> f1()
8   disp('Hello world');
K>> dbstack
> In f1>f4 at 8
  In f1>f3 at 6
  In f1>f2 at 4
  In f1 at 2
  In f1>f4 at 8
  In f1>f3 at 6
  In f1>f2 at 4
  In f1 at 2
K>> 

Hacer una dbquit (para salir de la sesión del depurador anidada) se pone de nuevo al centro de la pila de llamada original donde lo dejó.

K>> dbquit
K>> dbstack
  In f1>f4 at 8
  In f1>f3 at 6
> In f1>f2 at 4
  In f1 at 2
K>> 

Si dbcont fuera de su, entonces el flujo de control "K >>" se reanudará desde el fondo de la pila de llamadas, donde se planteó inicialmente el punto de interrupción, independientemente de lo que la pila enmarcar K >> está mirando. No se puede utilizar el depurador para cambiar el flujo de control del código de la línea principal que se ejecuta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top