# L'interfaccia del debugger

Per i linguaggi C e C++, KDevelop contiene un debugger interno che è direttamente integrato nell'editor. Tecnicamente è implementato come un frontend che usa gdb (portable &GNU; debugger) attraverso una pipe. Il debugger può essere avviato in diversi modi:

- Con Debug Avvia, il programma principale del proprio progetto viene caricato nel debugger.

- Usando Debug Esamina il file core... viene caricato in memoria un file core che è stato generato dal kernel del sistema operativo quando il programma è andato in crash (la generazione di file core potrebbe essere disattivata sul proprio sistema, vedere ulimit(1)). Questo è utile per un'analisi post-mortem del programma.

- Con Debug Collega al processo si usa il debugger su un programma già in esecuzione. Verrà mostrata una lista di processi da dove si può selezionare quello che dovrà essere supervisionato dal debugger.

- Notare che questo debug è possibile se il proprio progetto è stato compilato con l'attivazione delle informazioni di debug. Possono essere attivate nella finestra di dialogo Opzioni compilatore. Quando questa opzione è attivata il compilatore genera dati aggiuntivi che permettono al debugger di associare i nomi dei file e numeri di linea con gli indirizzi nel file eseguibile.

Il frontend del debugger fornisce diverse viste nel processo:

Se si tenta di effettuare il debug di un progetto che non ha le informazioni di debug si riceverà il messaggio `Sorgente inesistente...` nella barra di stato. Se si tenta di impostare un breakpoint, viene visualizzato come `Pendente (aggiungi)` nella finestra dei breakpoint (vedere sotto).

Variabili

- Questa finestra elenca i valori di tutte le variabili locali del punto corrente dell'esecuzione del programma. Esso include le variabili dell'intero stack delle chiamate, &ie; la funzione dove è stato interrotto il processo, la funzione che ha chiamato quella funzione e così via fino a `main()`.

  Un altro ramo di variabili contiene le variabili di osservazione. Si possono configurare quali variabili mostrare qui. Possono essere osservate sia le variabili locali che globali. Si possono aggiungere variabili facendo clic sul pulsante Aggiungi o premendo RETURN mentre è selezionata la voce Espressione da controllare. Possono essere rimosse nuovamente attraverso il menu contestuale.

Stack del frame

- (... da scrivere ...)

Breakpoint

- In questa finestra vengono mostrati e modificati i breakpoint. &kdevelop; usa GDB, quindi per capire pienamente le sue funzionalità di debug, è necessario conoscere anche quest'ultimo.

  Se si vuole controllare il codice sorgente, i breakpoint sono definiti nel file `kdevelop/languages/cpp/debugger/breakpoint.h`.

  Nel bordo sinistro la finestra presenta vari pulsanti per:

  - Aggiungere un breakpoint vuoto

  - Modificare il breakpoint selezionato

  - Eliminare il breakpoint selezionato

  - Rimuovere tutti i breakpoint

  La parte principale della finestra è costituita da una tabella con 7 colonne. Ogni linea della tabella rappresenta un breakpoint. Le colonne sono:

  1. Casella di selezione

  2. Il tipo può essere: Non Valido, File:Linea, Punto di Controllo, Indirizzo, Funzione

  3. Stato: i valori possono essere:

     - Attivo

     - Disabilitato: ogni breakpoint può essere abilitato o disabilitato; finché non viene abilitato, non ha effetti sul programma.

     - Pendente (aggiungi): un breakpoint è in questo stato se non è disponibile nessuna informazione di debug. Dalla pagina Info di GDB:

       > Se una specifica posizione del breakpoint non viene trovata, potrebbe essere all'interno di una libreria condivisa (shared) che non è stata ancora caricata. In questo caso, si può far creare a GDB un breakpoint speciale (noto come breakpoint pendente) che tenterà di effettuare la propria risoluzione quando verrà caricata la libreria condivisa.

  4. Pendente (chiaro)

  5. Pendente (modifica)

  6. Posizione nel formato nomefile:numerolinea

  7. Condizione

  8. Ignora il conteggio: se esiste un numero `COUNT` maggiore di zero, per le prossime `COUNT` volte in cui viene raggiunto il breakpoint, l'esecuzione del programma non verrà interrotta; gdb non intraprende alcuna azione, a parte decrementare il valore della variabile.

  9. Trovati: conta quante volte è stato raggiunto il breakpoint.

Disassembla

- (... da scrivere ...)

## Impostare i breakpoint

(... da scrivere ...)

## Opzioni

Visualizzare nomi mangled (storpiati)

- Nel C++, i nomi delle funzioni negli eseguibili sono detti mangled (storpiati), &ie; il nome della funzione include le informazioni sul tipo degli argomenti. Questo è necessario per il supporto al sovraccaricamento delle funzioni. L'algoritmo di mangling non è standardizzato e differisce persino tra versioni diverse del compilatore C++ &GNU;.

  Normalmente nella finestra di disassemblaggio vengono visualizzati nomi non mangled, quindi le firme delle funzioni sono simili a come appaiono nel codice sorgente, quindi facilmente leggibili. In alternativa si può decidere di vedere i nomi mangled.

Tentare di impostare i breakpoint al caricamento delle librerie

- Il backend del debugger gdb non permette di inserire breakpoint all'interno di codice non caricato. Questo potrebbe essere sconveniente in una applicazione altamente modulare, dove spesso il codice viene caricato su richiesta come un plugin (usando la funzione di libc `dlopen(3)`), quindi &kdevelop; ha esteso il proprio supporto per i breakpoint nelle librerie condivise. Se si imposta questa opzione si potranno impostare i breakpoint in librerie che non sono state caricate. Quando gdb notificherà che una libreria è stata caricata, &kdevelop; tenterà di impostare i breakpoint sospesi.

Abilitare la barra degli strumenti fluttuante

- (... da scrivere ...)