Guida introduttiva: eseguire il debug con C++ usando il debugger di Visual Studio

Il debugger di Visual Studio propone molte funzionalità potenti per il debug delle app. Questo argomento consente di apprendere in modo rapido come usare alcune funzionalità di base.

Crea un nuovo progetto

  1. Aprire Visual Studio e creare un progetto.

    Premere ESC per chiudere la finestra iniziale. Premere CTRL+Q per aprire la casella di ricerca, digitare c++, scegliere Modelli e quindi scegliere Create new Console App project (Crea nuovo progetto app console). Nella finestra di dialogo visualizzata scegliere Crea.

    Se il modello di progetto Applicazione console di Windows non viene visualizzato, passare a Strumenti>Ottieni strumenti e funzionalità, aprendo così il programma di installazione Visual Studio. Verrà avviato il Programma di installazione di Visual Studio. Selezionare il carico di lavoro Sviluppo di applicazioni desktop con C++, quindi scegliere Modifica.

    Visual Studio crea il progetto.

  2. In MyDbgApp.cpp sostituire il codice seguente

    int main()
    {
        return 0;
    }
    

    con questo codice (non rimuovere #include "stdafx.h"):

    #include <list>
    #include <iostream>
    
    using namespace std;
    
    void doWork()
    {
        list <int> c1;
    
        c1.push_back(10);
        c1.push_back(20);
    
        const list <int> c2 = c1;
        const int &i = c2.front();
        const int &j = c2.front();
        cout << "The first element is " << i << endl;
        cout << "The second element is " << j << endl;
    
    }
    
    int main()
    {
        doWork();
    }
    

Imposta punto di interruzione

Un punto di interruzione è un indicatore che segnala il punto in cui Visual Studio dovrebbe sospendere l'esecuzione del codice in modo da poter esaminare i valori delle variabili, il comportamento della memoria o lo stato di esecuzione di un ramo del codice. È la più semplice funzionalità di debug.

  1. Per impostare il punto di interruzione, fare clic nella barra di navigazione a sinistra della chiamata di funzione doWork o selezionare la riga di codice e premere F9.

    Set a breakpoint

  2. A questo punto premere F5 o scegliere Debug > Avvia debug.

    Hit a breakpoint

    Il debugger si ferma in corrispondenza del punto di interruzione impostato. L'istruzione in corrispondenza della quale si è bloccato il debugger e si è interrotta l'esecuzione dell'app è indicata dalla freccia gialla. La riga con la chiamata di funzione doWork non è stata ancora eseguita.

    Suggerimento

    Se è presente un punto di interruzione in un ciclo o in una ricorsione oppure sono presenti molti punti di interruzione in un codice che si esegue di frequente, usare un punto di interruzione condizionale per fare in modo che il codice venga sospeso SOLO se sono soddisfatte specifiche condizioni. Un punto di interruzione condizionale consente di risparmiare tempo e può facilitare il debug di problemi che sono difficili da riprodurre.

    Quando si tenta di eseguire il debug degli errori di memoria in C++, i punti di interruzione possono anche servire per controllare i valori degli indirizzo (cercare NULL) e i conteggi di riferimento.

Sono disponibili diversi comandi per indicare al debugger di continuare. Viene illustrato un utile comando di esplorazione del codice disponibile a partire da Visual Studio 2017.

Mentre è in pausa in corrispondenza del punto di interruzione, passare il puntatore del mouse sull'istruzione c1.push_back(20) fino a quando non viene visualizzato il pulsante Run to Click Verde Esegui per fare clic e quindi premere il pulsante Esegui per fare clic.

Run to click

L'app riprende l'esecuzione, esegue la chiamata a doWork e si blocca sulla riga di codice in cui si è fatto clic.

I comandi della tastiera comuni usati per eseguire il codice sono F10 e F11. Per altre istruzioni dettagliate, vedere Presentazione del debugger.

Esaminare le variabili in un suggerimento dati

  1. Nella riga corrente del codice, segnalata dal puntatore di esecuzione giallo, passare il mouse sopra l'oggetto c1 per visualizzare un suggerimento dati.

    View a datatip

    Il suggerimento dati mostra il valore corrente della variabile c1 e consente di controllarne le proprietà. Se viene visualizzato un valore non previsto durante il debug, è probabile che ci sia un bug nelle righe di codice precedenti o chiamate.

  2. Espandere il suggerimento dati per esaminare i valori delle proprietà dell'oggetto c1.

  3. Se si preferisce bloccare il suggerimento dati in modo che sia sempre possibile vedere il valore di c1 mentre si esegue il codice, fare clic sulla piccola icona Aggiungi. Il suggerimento dati aggiunto può essere spostato in una posizione più comoda.

Modificare il codice e continuare il debug

Se durante una sessione di debug, nel codice si rileva una modifica che si desidera testare, è possibile farlo.

  1. Fare clic sulla seconda istanza di c2.front() e modificare c2.front() in c2.back().

  2. Premere F10 (o Esegui > debug passaggio) alcune volte per far avanzare il debugger ed eseguire il codice modificato.

    Edit and continue

    F10 fa avanzare il debugger un'istruzione alla volta, ma ignora le funzioni anziché fermarsi. Il codice ignorato viene comunque eseguito.

Per altre informazioni sull'uso della funzione di modifica e continua e sulle limitazioni della funzionalità, vedere Modificare il codice e continuare il debug.

Passaggi successivi

In questa esercitazione si è appreso come avviare il debugger, eseguire il codice ed esaminare le variabili. Sono disponibili una panoramica delle funzionalità del debugger e collegamenti a ulteriori informazioni.