GNU Debugger (GDB) è un debugger open source per GNU Systems. Il debugger è portatile e può essere utilizzato per più linguaggi come C/C++ e Fortran. Può essere utilizzato per il debug dei programmi osservando i loro stati su punti di interruzione specifici e persino alterando il flusso oi valori per un'ulteriore esecuzione. Di solito, il GDB viene eseguito nella riga di comando, ma sono state sviluppate anche diverse GUI.
In questo articolo, esploriamo come eseguire il debug dei programmi C utilizzando GDB in Ubuntu 20.04 LTS (Focal Fossa).
Prerequisiti
- Sistema Ubuntu 20.04
- Utente con privilegi sudo per rinominare più file.
Nota: I comandi discussi in questo articolo sono stati testati su Ubuntu 20.04 LTS (Fossa focale).
Installazione dei pacchetti
Installare i pacchetti GN prerequisiti per la compilazione e il debug. Esegui il seguente comando nel terminale:
$ sudo apt install gcc gdb -y
Esempio di programma C per il debug
Codice
Prima dell'esecuzione, è necessario compilare un programma. Compileremo il seguente codice C nel file main.c .
#include <stdio.h> int main() { for (int i=0; i<5; ++i) { printf("Iterator: %d\n", i); } return 0; }
Compila il programma C utilizzando GCC
Di solito, un codice C viene compilato in GCC usando il seguente comando:
$ gcc main.c -o bin
È necessario fornire un altro argomento per includere simboli nel binario. Questi simboli sono usati da GDB per tracciare ed eseguire il debug del programma. Esegui il seguente comando nel terminale per compilare il codice C:
$ gcc -g main.c -o bin
Un file eseguibile chiamato bin apparirà.
Esegui il programma di test
Il file binario denominato bin può essere eseguito come qualsiasi altro file eseguibile su un'interfaccia a riga di comando. Usa il seguente comando per eseguirlo nel terminale:
$ ./bin
Apparirà l'output del codice.
Debug di un'applicazione su Linux
Avvia debugger
Esegui l'utilità GDB usando il seguente comando nel terminale:
$ gdb bin
Premi invio. Apparirà la console per il terminale GDB. Entra nella corsa comando in questa console per eseguire l'eseguibile fornito all'utilità come argomento.
(gdb) run
Debug dei punti di interruzione
Aggiungi punti di interruzione
I punti di interruzione possono essere aggiunti in diversi modi. Aggiungeremo un punto di interruzione su printf funzione nel nostro codice. Esegui il seguente comando nel terminale per aggiungere un punto di interruzione:
(gdb) break printf
In alternativa, è possibile utilizzare anche un numero di riga per aggiungere un punto di interruzione.
(gdb) break 6
Entra nella corsa comando e il programma si fermerà al punto di interruzione.
Scorri i punti di interruzione
Usa il comando continua per continuare l'esecuzione del programma.
(gdb) continue
Ci sono altri due comandi per scopi diversi di continuare l'esecuzione del programma:
- Passo:passa attraverso l'istruzione macchina successiva.
- Avanti:passa alla riga di codice successiva.
Possono essere utilizzate anche abbreviazioni di comandi. Come abbreviazione di continua il comando è c.
(gdb) c
Informazioni sui punti di interruzione
Le informazioni sui punti di interruzione possono essere osservate utilizzando info comando di gdb . Esegui il seguente comando dal terminale:
(gdb) info breakpoints
Appariranno le informazioni sui punti di interruzione.
Nota:il numero a sinistra del punto di interruzione viene utilizzato per fare riferimento ad esso da altri comandi.
Elimina punti di interruzione
Un punto di interruzione può essere eliminato utilizzando elimina comando e facendo riferimento al numero di punto di interruzione osservato nell'output di info utilità.
(gdb) delete 1
Ora il punto di interruzione è stato cancellato e, se eseguito, il programma verrà eseguito fino alla fine.
Variabili di visualizzazione
Le variabili possono essere osservate utilizzando l'utility watch. Innanzitutto, dobbiamo inserire l'ambito in cui esiste la variabile. A tale scopo, aggiungi prima un punto di interruzione utilizzando il seguente comando:
(gdb) break 6
Quindi esegui il codice che raggiunge questo punto di interruzione.
(gdb) r
Ora siamo nel ciclo in cui la variabile i esiste.
L'orologio il comando verrà utilizzato per osservare il valore precedente e nuovo della variabile i nel ciclo.
(gdb) watch i
Ora il punto di interruzione generato da watch il comando apparirà anche nell'elenco dei punti di interruzione. L'elenco dei punti di interruzione può essere visualizzato utilizzando il seguente comando:
(gdb) info breakpoints
Inoltre, non abbiamo bisogno del punto di interruzione inserito in precedenza. Può essere facilmente rimosso utilizzando il seguente comando:
(gdb) delete 1
Ora, se continua, il codice visualizzerà i valori ogni volta che la variabile ha modificato il valore e mostrerà sia i valori vecchi che quelli nuovi.
(gdb) c
Si possono osservare anche ulteriori iterazioni del programma, usando lo stesso comando.
Chiudi Debugger
Esegui il seguente comando nel terminale per uscire dal debugger.
(gdb) quit
Questo chiude gdb apparirà l'utilità e il prompt della riga di comando predefinito.
Conclusione
In questo articolo, abbiamo esplorato come eseguire e interrompere un programma in GDB. Inoltre, è stato configurato anche per interrompersi quando il valore di una variabile è cambiato. Ci auguriamo che tu possa eseguire facilmente il debug dei tuoi programmi in GDB dopo aver seguito questo articolo.