Domanda

mi piace di eseguire il debug in MATLAB utilizzando i comandi. alcune domande:

  1. Se scegliete uno stack, è possibile passare a una pila specifica direttamente invece di spostare una pila dopo l'altro utilizzando dbup e dbdown?
  2. Dopo il salto a una pila di mezzo, se eseguo alcuni comandi, perché auto ritorna alla interna più impilare? Posso stare al camino centrale fino a che non emettere un comando di partire per un'altra pila?
È stato utile?

Soluzione

1) Non dalla tastiera. Se stai usando l'editor e hanno l'Editor barra degli strumenti visualizzata, c'è un menu a discesa "Stack" che vi mostra l'intero stack di chiamate, e si può passare ad un livello arbitrario. Potreste essere in grado di incidere un n-livello di dbup / dbdown insieme, cercando in cosa c'è in quella discesa, ma il controllo debugger è molto difficile da script da Matlab a causa dell'interazione del debugger e il M-code che si sta utilizzando per lo scripting .

2) Se si invia un comando dal prompt dei debugger "K >>", quando finisce dovrebbe tornare voi il livello dello stack si rilasciato da, come ci si aspetta. Hai ancora il punto di interruzione impostato al livello inferiore del codice? Forse si sta effettivamente vedere un debugger "K >>" secondaria pronta da un punto di interruzione nello stack di chiamate nidificato. Si possono avere essenzialmente molteplici contesti debugger nidificato.

Ad esempio:

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

Se si lancia nel debugger come questo, ti ha colpito il punto di interruzione in fondo a uno stack di chiamate che si è stato lanciato dalla sessione debugger originale.

>> 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>> 

Facendo un dbquit (uscire dalla sessione di debugger nidificato) si torna alla metà dello stack di chiamate originale in cui si era interrotto.

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

Se dbcont fuori di "K >>", quindi controllare il flusso riprenderà dal fondo dello stack di chiamate, in cui il punto di interruzione è stato originariamente sollevata, indipendentemente da ciò che impilare telaio K >> sta guardando. Non è possibile utilizzare il debugger per modificare il flusso di controllo di essere eseguito il codice linea principale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top