Come funziona il GDB?
Il GDB (Gnu Source-Level Debugger) può fare essenzialmente quattro
tipi di operazioni:
Avviare il vostro programma, specificando tutto ciò che influisce
sul suo comportamento.
Fare in modo che il vostro programma si interrompa sotto date condizioni.
Esaminare quello che é accaduto, quando il vostro programma é stato
interrotto.
Cambiare le cose nel vostro programma, in modo che possiate sperimentare
gli effetti delle correzioni di un dato bug.
Per lavorare con il GDB occorre produrre le informazioni necessarie
al debugging nel formato specifico del sistema. Nella maggior parte
dei sistemi che usano il formato "stabs", l'opzione '-g'
data al GCC, in fase di compilazione abilita l'uso delle informazioni
extra necessarie al debugging con il GDB. Ecco un esempio di compilazione:
cyberspace.org:~$
gcc -g -o mio_programma mio_programma.c
Una volta compilato il programma, avviamo il GDB:
cyberspace.org:~$
gdb mio_programma
oppure se vogliamo analizzare anche il file core
cyberspace.org:~$
gdb mio_programma core
Ora per eseguire il programma fino al primo breakpoint o watchpoint
é necessario digitare: (gdb) run
Il lettore attento, ora si starà chiedendo che cosa sia un breakpoint
o un watchpoint, vediamolo.
Breakpoint e Watchpoint.
Breakpoint
Un breakpoint fa in modo che il vostro programma si interrompa
ogni volta che viene raggiunto un dato punto. L'impostazione di
un breakpoint é abbastanza flessibile, in quanto si possono specificare
diverse condizioni ad esso relative. Facciamo un piccolo schema
relativo alle varie opzioni che possiamo dare al comando break al
fine di impostare un breakpoint.
Tabella 2-7. Impostazione Breakpoint
|
Comando |
Descrizione |
|
Break |
In questo modo si imposta il breakpoint alla istruzione successiva, che deve essere eseguita. |
|
Break nome_funzione |
Imposta un breakpoint alla funzione nome_funzione, dove nome_funzione é una funzione del vostro programma. |
|
break numero_linea |
Imposta un breakpoint, alla linea numero_linea del file corrente |
|
break nomefile:nome_funzione |
Imposta un breakpoint, alla funzione nome_funzione del file sorgente nomefile |
|
break nomefile:numero_linea |
Imposta un breakpoint, alla linea numero_linea del file sorgente nomefile |
|
breakif cond |
Imposta un breakpoint, con una condizione cond; valuta l'espressione ogni volta, che viene raggiunta e si ferma se e solo se la condizione é un valore diverso da zero. |
|
Comando |
Descrizione |
Molto probabilmente ora vorrete visualizzare tutti i breakpoints
oppure lo stato degli stessi (compreso il loro numero), basta fare
allora:
(gdb) info breakpoints
Watchpoint
A differenza di un breakpoint, un watchpoint ferma il programma
quando il valore di una data espressione cambia. Potete gestire
un watchpoint in maniera simile ad un breakpoint; potete quindi
assegnarlo, abilitarlo, ottenere le informazioni relative, disabilitarlo
e cancellarlo con comandi molto simili. Per impostare un watchpoint,
e vedere le informazioni relative basta digitare:
Per settare un watchpoint:
(gdb) watch espressione
Per vedere i watchpoint correnti e il loro relativo numero:
(gdb) info watch
Dove espressione, é una variabile del vostro programma sorgente.
Il GDB interromperà l'esecuzione quando l'espressione viene scritta
dal programma e il suo valore cambia.
Torna all'indice Generale del corso di Corso di C con Linux di Software Planet