Le finestre in alto della prospettiva di debug rappresentano rispettivamente:
- la finestra di debug
- il gruppo di finestre di analisi
La finestra di debug visualizza lo stato del debug e il flusso di esecuzione. La rappresentazione del flusso di esecuzione (stack) della applicazione è di tipo gerarchico e visualizza all'interno del thread principale della applicazione, evidenziato, la classe sotto debug (nel nostro caso la classe Debugger
) e la funzione all'interno della classe: button1_clickHandler
.
Sempre da questa finestra, attraverso la sua toolbar o attraverso l'utilizzo dei tasti funzione, è possibile fermare l'applicazione, proseguire fino al prossimo breakpoint, escludere il debugger o proseguire l'esecuzione a passi.
Vediamo tutto questo praticamente. In modalità source aggiungiamo questa semplice funzione:
// Prodotto di due numeri private function mul(num1:Number,num2:Number):Number { var ritorno:Number=num1*num2; return ritorno; }
Ora richiamiamo questo metodo nell'event handler del bottone:
protected function button1_clickHandler(event:MouseEvent):void { trace("Hello world debugger"); trace( + new Date().toString()); var risultato:Number = mul(5,3); trace("Il risultato del prodotto di 5x3=" + risultato); }
Mandiamo in esecuzione il progetto e clicchamo sul bottone, quando il progetto si arresta possiamo procedere passo passo grazie ai comandi che troviamo nella barra degli strumenti della finestra debug.
Pulsante | ShortCut | Descrizione |
---|---|---|
step over | F6 | consente di avanzare riga per riga. Se un'istruzione chiama una funzione, il flusso del codice esegue la funzione e passa alla riga successiva senza interrompere il flusso |
step into | F5 | uguale alla precedente, ma quando trova una funzione, passa all'esecuzione passo-passo anche delle istruzioni della funzione chiamata, diversa da quella che stiamo analizzando |
step Return | F7 | nel caso in cui siamo all'interno di una funzione, completa l'esecuzione della funzione corrente e si ferma alla riga successiva della riga di codice che l'ha invocata |
Resume | F8 | L'esecuzione viene ripresa fino al Breakpoint successivo |
Per fare un esempio possiamo lanciare la nostra applicazione e provare le varie modalità di esecuzione sulla chiamata alla funzione mul()
. Osserviamo che con step over
passiamo alla riga successiva senza entrare nel merito della funzione mul()
, mentre con step into
il debugger ci porta sulla prima riga di mul()
e per uscirne rapidamente possiamo premere step return
.
Osservando la finestra di Debug notiamo lo stack delle chiamate nel punto in siamo fermi. Sotto il ramo Main Thread
, in ordine inverso, abbiamo il flusso di esecuzione: cioè siamo fermi sulla classe Debugger
, nella funzione mul
, che e' stata chiamata dalla funzione button1_clickHandler
della classe Debugger
.