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: |
|
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