Quando Utilizzare un Debugger

Vai all'articolo originale

Uso del debugger in Visual C++

di Peter Meyer

 

Quando Utilizzare un Debugger

 

Il debug è il nome dato al processo di rimozione dei bug dai programmi per computer. Questo non potrà mai essere completato interamente, perché "c'è sempre un ultimo bug". Tuttavia, è possibile rimuovere tutti i bug tranne quest'ultimo. Per questo l'uso di un debugger può essere molto utile. Questo è un programma progettato per eseguire le istruzioni in un altro programma e di esaminare lo stato di quel programma ad ogni passaggio.

 

Il debug inizia non appena ti chiedi perché il tuo programma non produce i risultati che desideri. La prima cosa da fare è essere sicuri che il codice C/C++ compili e si colleghi senza errori. Se si verifica un messaggio di errore, il codice dovrebbe essere modificato in modo che non si verifichi.

 

La seconda cosa da fare è esaminare il tuo codice e confrontare i risultati attesi con quelli ottenuti. A volte capita, tuttavia, che un esame approfondito del codice non riveli alcun bug. Quindi potresti voler inserire un codice di debug. Questo può consistere nella asserzione di un'istruzione per assicurarsi che le variabili abbiano i valori che ci si aspetta da loro in determinati punti del programma (ad esempio, assert (n> 0)). Se le asserzioni falliscono, il programma si arresta con un messaggio di errore.

 

Il debug del codice può anche consistere in istruzioni per stampare (utilizzando printf o cout) i valori di determinate variabili in determinati punti del codice per fornire informazioni su ciò che sta accadendo mentre il programma è in esecuzione. Se questo ancora non getta alcuna luce sul bug allora è il momento di accendere il debugger.

 

 

Che Cosa Può Fare un Debugger

 

  • Passare attraverso il programma uno alla volta, "sopra" o "in".
  • Eseguire il programma fino a un certo punto (o sul cursore o su un "punto di interruzione") e poi fermarsi.
  • Mostrare i valori (o il contenuto) delle variabili in ogni punto durante l'esecuzione del programma.

 

 

Come utilizzare il debugger di Visual C++

Questo vale per le versioni 5 e 6 del compilatore Microsoft Visual C++.

Il debugger in altre versioni può essere diverso per alcuni aspetti.

Per utilizzare il debugger nell'ambiente di programmazione Visual C ++, è necessario aver compilato e collegato il programma utilizzando la configurazione "Debug" (non la configurazione "Release"). La configurazione viene impostata utilizzando le opzioni di menu Build | Set Active Configuration . Questa è la configurazione di default, quindi non devi impostarla a meno che tu abbia precedentemente modificato la configurazione in "Release".

 

Di solito non è utile passare attraverso le istruzioni in un programma che inizia con la prima istruzione in main (). È meglio far funzionare il programma fino a quando non arriva a quella parte del tuo codice dove pensi che il bug risieda. Ci sono due modi per dire al debugger di essere eseguito fino a quel punto. Puoi posizionare il cursore in quel punto del tuo codice e premere Ctrl-F10 (o usare Build | Start Debug | Run to Cursor). Il programma verrà eseguito dal debugger e, se tutto andrà bene, si fermerà nel punto del codice che hai selezionato e verranno aperte le finestre del debugger. Naturalmente, è possibile che il programma termini prima che venga raggiunto il punto di arresto previsto. In tal caso, scegli un luogo precedente nel programma.

 

Il secondo modo per dire al debugger di andare nel luogo del tuo codice che desideri esaminare è impostare un "punto di interruzione". Per impostare un punto di interruzione, posizionare il cursore nella posizione desiderata e premere F9 (oppure utilizzare il tasto destro del mouse | Inserisci / Rimuovi punto di interruzione). Se è stato impostato un punto di interruzione, puoi rimuoverlo posizionando il cursore vicino ad esso e premendo F9. (I punti di interruzione possono anche essere disabilitati usando F9 o facendo clic con il pulsante destro del mouse | Disattiva punto di interruzione.) Una volta impostato un punto di interruzione, premere F5 (o utilizzare Build | Start Debug | Go) per far eseguire il programma al debugger e interrompere al punto di interruzione, dopo di che vengono aperte le finestre del debugger (se non sono già aperte).

 

Le finestre in basso a sinistra e in basso a destra dello schermo contengono nomi e valori di variabili. Quelli nella finestra di sinistra includono le variabili locali alla funzione che si sta eseguendo. Quelli nella finestra di destra sono variabili specificate dall'utente. Per specificare una variabile, fare clic sulla parte sinistra della prima riga vuota, quindi digitare il nome della variabile. Dopo aver premuto Invio, verrà visualizzato il valore di tale variabile (se ha un valore). È quindi possibile visualizzare come le variabili visualizzate cambiano di valore mentre l'esecuzione del programma viene continuata.

 

Premendo F1 viene visualizzata la Guida Contestuale. Ad esempio, ci dice la differenza tra variabili "Auto" e variabili "Locali":

 

La scheda “Auto” visualizza le informazioni sulle variabili utilizzate nell'istruzione corrente e nell'istruzione precedente.

La scheda “Locali” visualizza informazioni sulle variabili che sono locali rispetto alla funzione corrente.

 

Per visualizzare il valore di una variabile senza doverne digitare il nome, posiziona il cursore da qualche parte all'interno del nome della variabile e premi Maiusc + F9 (o Debug | QuickWatch).

 

È possibile continuare l'esecuzione del programma in diversi modi. Il più semplice è premere F10 (o Debug | Step Over) per eseguire l'istruzione successiva (che è indicata dalla piccola freccia gialla sul margine sinistro della finestra del codice). Premendo F10 si passa ripetutamente attraverso le istruzioni successive del programma. Partecipa alle informazioni fornite nelle finestre in basso. Ad esempio, se ci si trova in un'istruzione

 

if ((j = atoi (buffer))> = 2000)

 

(che converte la stringa nel buffer in un numero intero, inserisce il valore nella variabile j e lo confronta in 2000), quindi dopo aver premuto F10 verrai informato sul valore restituito da atoi ().

 

Se ti trovi in una chiamata di funzione, F10 fa in modo che quella funzione venga eseguita e quando il debugger restituisce il controllo sei nella prossima istruzione. In una chiamata a una funzione è possibile premere F11 (o Debug | Step Into) per accedere a tale funzione (se il codice per tale funzione è stato compilato in modalità "Debug"). È quindi possibile utilizzare F10 per scorrere le istruzioni in tale funzione. Quando ci si trova all'interno di una funzione, è possibile premere Shift-F11 (o Debug | Step Out) per scorrere il resto della funzione e tornare al punto in cui è stata richiamata la funzione.

 

All'avvio del debugger si apre una finestra per l'output del programma, quindi è possibile alternare tra il debugger e questa finestra per vedere cosa il programma sta inviando allo schermo.

 

Oltre a F10, F11 e Maiusc-F11 puoi usare Ctrl-F10 (o Debug | Run to Cursor) per correre alla posizione del cursore. È inoltre possibile impostare ulteriori punti di interruzione e utilizzare F5 (o Debug | Go) per eseguire a turno ciascuno di essi. Puoi avere diversi punti di interruzione attivi, e puoi disabilitarli o rimuoverli a piacimento posizionando il cursore su di loro e premendo F9.

 

Se vuoi vedere la definizione di una variabile posiziona il cursore all'interno del nome della variabile e usa il tasto destro del mouse | Vai a Definizione. Può accadere che il debugger ti dica che non può farlo finché non crea il database del browser, in qual caso gli dici di farlo.

 

Il Browser è un'utile strumento che è possibile utilizzare per ottenere la definizione di qualsiasi variabile nel programma e le posizioni nel programma in cui viene utilizzata tale variabile (i "riferimenti variabili"). Puoi richiamarlo usando Tools | SourceBrowser.

 

Se il tuo programma accetta gli argomenti della riga di comando, durante il debug puoi impostarli usando Project | Settings | Debug | Program arguments.

 

Per riavviare il programma dall'inizio premere Ctrl-Maiusc + F5 (o Debug | Restart).

 

Per fermare il debugger e tornare alla modalità di modifica è possibile utilizzare Maiusc-F5 (o Debug | Stop Debugging).

 

F5 Avvia l'esecuzione del programma e lo esegue fino al raggiungimento di un punto di interruzione.

 

Maiusc-F5 Interrompe il debug e torna alla modalità di modifica del programma.

 

Ctrl-Shift-F5 Riavvia il programma in modalità di debug. F9 Inserisci, disattiva o rimuovi un Punto di interruzione.

 

Maiusc-F9 Ottieni il valore di una variabile.

F10 Esegue l'istruzione corrente o la chiamata di funzione.

 

Ctrl-F10 Esegue il programma fino al punto in cui si trova il cursore.

 

F11 Se l'istruzione corrente è una chiamata di funzione, accede alla funzione.

 

Shift-F11 Se si esegue una funzione, la esegue fino alla fine e torna alla dichiarazione di chiamata.

 

 

 

Programmazione C/C ++                               Home Page di Hermetic Systems

Visit Us At Emfurn.ca!

If you're in Canada, please shop at Emfurn.ca.