Successivo: , Precedente: , Su: Debugging   [Contenuti][Indice]


14.1.2 Concetti fondamentali sul debug

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:

Stack frame

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

Punto d’interruzione

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.

Punto d’osservazione

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: , Precedente: , Su: Debugging   [Contenuti][Indice]