Corso di C con Linux

Il Gnu Debugger

 

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