Corso di C con Linux

Il Gnu Debugger II

 

Abilitazione e Disabilitazione di watchpoints e breakpoints

Come detto precedentemente un breakpoint o un watchpoint può avere uno dei quattro stati di abilitazione:
Abilitato. Il breakpoint (watchpoint) ferma l'esecuzione del vostro programma.
Disabilitato. Il breakpoint (watchpoint) non ha alcun effetto sul vostro programma.
Abilitato una volta. Il breakpoint (watchpoint) ferma il vostro programma e subito dopo viene disabilitato.
Abilitato per la cancellazione. Il breakpoint (watchpoint) ferma il vostro programma e subito dopo, viene cancellato in maniera permanente.

I comandi relativi sono descritti nella seguente tabella:

Tabella 2-8. Stati di abilitazione breakpoint

Comando

Descrizione

enable numero_breakpoint

Breakpoint abilitato

disable numero_breakpoint

Breakpoint disabilitato

enable once numero_breakpoint

Breakpoint abilitato una volta

enable delete numero_breakpoint

Breakpoint abilitato per la cancellazione

Comando

Descrizione

Muoversi durante l'esecuzione.

Ora per poter illustrare il nostro futuro esempio riassuntivo, che dia una visione completa di una sessione gdb, ci servono ancora due cose essenziali. La prima sono i comandi per muoversi durante il debug e per impostare gli eventuali parametri, la seconda é il concetto di backtrace che vedremo nel prossimo paragrafo. Forniamo una tabella riassuntiva di tutti i comandi necessari per muoversi durante una sessione di debug.

Tabella 2-9. Comandi utili per l'esecuzione

Comando

Descrizione

Set args

Se il nostro programma accetta degli argomenti, questo comando permette di specificarli in questo modo:
                                  set args argomento1 argomento 2 ...
                                  ecc.

show args

Mostra tutti gli argomenti specificati

run

Esegue il programma finché non incontra un breakpoint o un watchpoint.

next

Avanza alla linea successiva del programma senza entrare in sottofunzioni

list

Visualizza il codice sorgente relativo al programma

step

Avanza alla linea successiva del programma entrando nelle sottofunzioni

print nomevariabile

Stampa il contenuto della variabile nome variabile

step

Avanza alla linea successiva del programma entrando nelle sottofunzioni

help

Richiama l'help in linea interno al GDB.

clear tipo_argomento

Cancella un breakpoint (watchpoint). Il tipo_argomento é simile a quello di break.

finish

Completa l'esecuzione del programma sino alla terminazione della funzione

continue

Continua l'esecuzione fino al breakpoint (watchpoint) successivo.

delete numero_breakpoint

Cancella il breakpoint (watchpoint) numero_breakpoint

quit oppure CTRL+D

Esce dal GDB

Comando

Descrizione

Il GDB e lo stack

Siamo ora in grado di utilizzare il GDB, ma ogni volta che il vostro programma é interrotto, si rende molto utile capire quali sottofunzioni ha chiamato, tutto ciò per avere una piena comprensione dello su stato una volta interrotto.
Ogni volta che il vostro programma svolge una chiamata ad una funzione vengono generate delle informazioni relative alla chiamata stessa. Tali informazioni includono la posizione della chiamata, gli argomenti della chiamata e le variabili locali della funzione che é stata chiamata. Le informazioni vengono salvate in un blocco di dati chiamato stack frame. Gli stack frame sono allocati in una regione di memoria chiamata stack. Il GDB ci fornisce diversi comandi per interagire con lo stack, quello che viene usato di più e il comando backtrace. Il backtrace mostra una linea per frame, per differenti stack frame, partendo dal frame correntemente in esecuzione susseguito dal suo chiamante, continuando per tutto lo stack. Vediamo come si applica:

Tabella 2-10. Comandi utili per il backtrace

Comando

Descrizione

backtrace

Stampa un backtrace intero dello stack, una linea per frame per ogni frame dello stack. Si interrompe premendo CTRL+C.

backtrace n

Stampa un backtrace per i primi n frame dello stack.

backtrace -n

Simile, ma stampa un backtrace per gli ultimi n frame dello stack.

Comando

Descrizione


Detto questo ora siamo in grado di vedere la nostra sessione di esempio, che riassuma tutta la teoria finora vista... aspettate però la prossima puntata!

 

Torna all'indice Generale del corso di Corso di C con Linux di Software Planet