Capitolo 7. Fare il debug dei programmi in KDevelop

Eseguire un programma nel debugger

Una volta che hai un lancio configurato (vedi Eseguire programmi), puoi anche eseguirlo in un debugger: seleziona la voce del menu EseguiDebug del lancio, o premi Alt+F9. Se hai familiarità con gdb, l'effetto è lo stesso di avviare gdb con l'eseguibile specificato nella configurazione di lancio e poi lanciare l'esecuzione con Esegui. Questo significa che se il programma chiama da qualche parte la funzione abort() (ad es. quando incappi in un'asserzione) o se c'è un segmentation fault, allora il debugger si fermerà. D'altra parte, se il programma viene eseguito fino alla fine (con o senza fare la cosa giusta) allora il debugger non si fermerà da solo prima che il programma sia finito. In quest'ultimo caso, vorrai impostare un breakpoint su tutte quelle righe del tuo codice nelle quali vuoi che il debugger si fermi prima di eseguire il debug del lancio. Questo puoi farlo spostando il cursore del mouse su una riga di quel tipo e selezionando la voce del menu EseguiAttiva/Disattiva breakpoint, o facendo clic con il tasto destro su una riga e selezionando dal menu contestuale Attiva/Disattiva breakpoint.

Eseguire un programma nel debugger porrà KDevelop in una diversa modalità: rimpiazzerà tutti i pulsanti «Strumento» della finestra principale con quelli più appropriati per il debug, piuttosto che per la modifica. Puoi vedere in quale modalità sei guardando in alto a destra nella finestra: ci sono tabelle chiamate Revisione, Debug, e Codice; fare clic su queste ti permette di scegliere una delle tre modalità: ogni modalità ha un proprio insieme di viste strumento, che puoi configurare allo stesso modo in cui hai configurato lo strumento Codice nella sezione Strumenti e viste.

Una volta che il debugger si ferma (ad un breakpoint, o in un punto dove viene chiamata la funzione abort()) puoi controllare una serie di informazioni riguardo il tuo programma. Per esempio, nella figura qui sopra, abbiamo selezionato lo strumento in basso Frame Stack (più o meno equivalente ai comandi «backtrace» e «info threads» di gdb) che mostra, sulla sinistra, i vari thread che sono attualmente in esecuzione nel tuo programma (qui in totale 8) e come, sulla destra, l'esecuzione ha raggiunto il punto di arresto (qui: main() called run(); l'elenco sarebbe più lungo se ci fossimo fermati su una funzione chiamata dalla stessa funzione run()). Sulla sinistra, possiamo controllare le variabili locali e l'oggetto corrente (l'oggetto puntato dalla variabile this).

Da qui ci sono diverse cose che puoi fare: puoi eseguire la riga corrente (F10, il comando «successivo» di gdb), passare dentro le funzioni (F11, il comando «passo» di gdb), o eseguire la funzione fino alla fine (F12, il comando «ferma» di gdb). In ogni fase, KDevelop aggiorna le variabili mostrate sulla sinistra con i valori attuali. Puoi anche passare il mouse sopra un simbolo del tuo codice, ad es. una variabile; KDevelop mostrerà quindi il valore attuale di quel simbolo e chiederà di fermare il programma durante l'esecuzione la prossima volta che il valore di questa variabile cambierà. Se conosci gdb, puoi anche fare clic sul pulsante strumento GDB in basso e avere la possibilità di inserire comandi gdb, per esempio al fine di cambiare il valore di una variabile (per la quale attualmente non sembra esserci altro modo).