C:
Utilizzare un debugger

Come fare:

GDB (GNU Debugger) è il debugger più comunemente utilizzato per la programmazione in C. Ecco una breve guida sull’uso di GDB per il debug di un semplice programma C.

Per prima cosa, compila il tuo programma C con il flag -g per includere le informazioni di debug:

gcc -g program.c -o program

Poi, avvia GDB con il tuo programma compilato:

gdb ./program

Ora puoi utilizzare vari comandi all’interno di GDB per controllarne l’operazione. Ecco alcuni comandi fondamentali:

  • break: Imposta un punto di interruzione su una riga o funzione specificata per mettere in pausa l’esecuzione.
    • Esempio: break 10 o break main
  • run: Avvia l’esecuzione del tuo programma all’interno di GDB.
  • next: Esegue la riga successiva di codice senza entrare nelle funzioni.
  • step: Esegue la riga successiva di codice, entrando nelle funzioni.
  • print: Mostra il valore di una variabile.
  • continue: Riprende l’esecuzione fino al punto di interruzione successivo.
  • quit: Esce da GDB.

Ecco un esempio di sessione di debug di un semplice programma:

#include <stdio.h>

int main() {
    int i;
    for (i = 0; i < 5; i++) {
        printf("%d\n", i);
    }
    return 0;
}

Compila e avvia GDB come descritto. Imposta un punto di interruzione sulla riga di printf con break 5 e poi run. Usa next per procedere attraverso il ciclo e print i per ispezionare la variabile del ciclo.

Output di esempio dopo aver impostato un punto di interruzione e prima della prima iterazione:

Breakpoint 1, main () at program.c:5
5         printf("%d\n", i);

Usando print i dopo alcune iterazioni:

$3 = 2

Questo dimostra come esaminare lo stato e il flusso di un semplice programma.

Approfondimento

Il concetto di debugging è evoluto significativamente dai primi giorni della programmazione, quando insetti fisici (letteralmente) potevano causare problemi nei computer meccanici. Oggi, debugger come GDB offrono funzionalità sofisticate oltre al passo-passo di base e all’ispezione delle variabili, come il debugging inverso (esecuzione del programma all’indietro), punti di interruzione condizionali e scripting per compiti di debugging automatizzati.

Sebbene GDB sia potente e ampiamente utilizzato, può essere denso e impegnativo per i principianti. Strumenti di debugging alternativi e IDE (Integrated Development Environments), come Visual Studio Code, CLion o Eclipse, offrono interfacce più amichevoli per il debugging del codice C, integrando spesso aiuti visivi e controlli più intuitivi. Queste alternative potrebbero non offrire tutta la profondità delle funzionalità di GDB, ma possono essere più accessibili per i neofiti della programmazione in C.

Inoltre, l’emergere di protocolli server linguistici e standard di debugging ha facilitato soluzioni di debugging multipiattaforma, rendendo l’esperienza di debugging più coerente attraverso strumenti e ambienti diversi. Nonostante questi progressi, imparare i dettagli di un debugger tradizionale come GDB fornisce una visione preziosa sull’esecuzione dei programmi in C e rimane un’abilità cruciale nel kit di strumenti di uno sviluppatore.