Successivo: Debug di Awk, Precedente: Nozioni sul debug, Su: Debugging [Contenuti][Indice]
Prima di entrare nei dettagli, dobbiamo introdurre diversi importanti concetti che valgono per tutti i debugger. La seguente lista definisce i termini usati nel resto di questo capitolo:
Durante la loro esecuzione i programmi normalmente chiamano delle funzioni. Una funzione può a sua volta chiamarne un’altra, o può richiamare se stessa (ricorsione). La catena di funzioni chiamate (il programma principale chiama A, che chiama B, che chiama C) può essere vista come una pila di funzioni in esecuzione: la funzione correntemente in esecuzione è quella in cima alla pila, e quando questa finisce (ritorna al chiamante), quella immediatamente sotto diventa la funzione attiva. Tale pila (stack) è chiamata call stack (pila delle chiamate).
Per ciascuna funzione della pila delle chiamate (call stack), il sistema mantiene un’area di dati che contiene i parametri della funzione, le variabili locali e i codici di ritorno, e anche ogni altra informazione “contabile” necessaria per gestire la pila delle chiamate. Quest’area di dati è chiamata stack frame.
Anche gawk
segue questo modello, e permette l’accesso alla pila
delle chiamate e a ogni stack frame. È possibile esaminare la pila
delle chiamate, e anche sapere da dove ciascuna funzione sulla pila è stata
invocata. I comandi che stampano la pila delle chiamate stampano anche le
informazioni su ogni stack frame (come vedremo più avanti in dettaglio).
Durante le operazioni di debug, spesso si preferisce lasciare che il programma venga eseguito finché non raggiunge un certo punto, e da quel punto in poi si continua l’esecuzione un’istruzione alla volta. Il modo per farlo è quello di impostare un punto d’interruzione all’interno del programma. Un punto d’interruzione è il punto dove l’esecuzione del programma dovrebbe interrompersi (fermarsi), in modo da assumere il controllo dell’esecuzione del programma. Si possono aggiungere e togliere quanti punti d’interruzione si vogliono.
Un punto d’osservazione è simile a un punto d’interruzione. La differenza è che i punti d’interruzione sono orientati attorno al codice; fermano il programma quando viene raggiunto un certo punto nel codice. Un punto d’osservazione, invece, fa fermare il programma quando è stato cambiato il valore di un dato. Questo è utile, poiché a volte succede che una variabile riceva un valore errato, ed è difficile rintracciare il punto dove ciò accade solo leggendo il codice sorgente. Usando un punto d’osservazione, si può fermare il programma in qualunque punto vi sia un’assegnazione di variabile, e di solito si individua il codice che genera l’errore abbastanza velocemente.
Successivo: Debug di Awk, Precedente: Nozioni sul debug, Su: Debugging [Contenuti][Indice]