Esercizio - Impostare punti di interruzione

Completato

I punti di interruzione vengono usati durante il processo di debug per sospendere l'esecuzione. In questo modo è possibile tenere traccia delle variabili ed esaminare la sequenza in cui viene eseguito il codice. I punti di interruzione sono un ottimo modo per avviare il processo di debug.

Imposta punto di interruzione

In precedenza in questo modulo è stato completato un esercizio in cui è stata eseguita un'applicazione nel debugger. L'applicazione visualizza "messaggi di saluto" nel pannello DEBUG CONSOLE. Alla fine dell'esercizio si è notato che il codice ripete il messaggio di saluto di Andrew in modo imprevisto.

In questo esercizio si userà un punto di interruzione per identificare il problema.

  1. Assicurarsi che il file Program.cs contenga l'esempio di codice seguente:

    /* 
    This code uses a names array and corresponding methods to display
    greeting messages
    */
    
    string[] names = new string[] { "Sophia", "Andrew", "AllGreetings" };
    
    string messageText = "";
    
    foreach (string name in names)
    {
        if (name == "Sophia")
            messageText = SophiaMessage();
        else if (name == "Andrew")
            messageText = AndrewMessage();
        else if (name == "AllGreetings")
            messageText = SophiaMessage();
            messageText = messageText + "\n\r" + AndrewMessage();
    
        Console.WriteLine(messageText + "\n\r");
    }
    
    bool pauseCode = true;
    while (pauseCode == true);
    
    static string SophiaMessage()
    {
        return "Hello, my name is Sophia.";
    }
    
    static string AndrewMessage()
    {
        return "Hi, my name is Andrew. Good to meet you.";
    }
    
  2. Usare gli strumenti del debugger di Visual Studio Code per impostare un punto di interruzione nella prima riga di codice all'interno del foreach ciclo.

    Screenshot che mostra un punto di interruzione nel codice.

    Suggerimento

    Un'opzione semplice per attivare o disattivare un punto di interruzione consiste nel selezionare (fare clic con il pulsante sinistro del mouse) l'area a sinistra del numero di riga. I punti di interruzione possono essere impostati anche usando il Run menu e i tasti di scelta rapida.

  3. Nel menu Esegui selezionare Avvia debug.

  4. Si noti che l'esecuzione del codice viene sospesa in corrispondenza del punto di interruzione e che la riga di codice corrente è evidenziata nell'editor.

    Screenshot che mostra l'esecuzione del codice sospesa in un punto di interruzione.

  5. Sulla barra degli strumenti Controlli di debug selezionare Esegui istruzione.

    È possibile posizionare il puntatore del mouse sui pulsanti sulla barra degli strumenti Dei controlli debug per visualizzare le etichette dei pulsanti.

  6. Si noti che l'esecuzione del codice passa alla riga di codice seguente e sospende:

    messageText = SophiaMessage();
    

    Questa riga di codice assegna al valore restituito dal metodo SophiaMessage alla variabile stringa messageText.

  7. Prenditi un momento per considerare il motivo per cui selezionare Step Into ha prodotto questo risultato.

    • Il pulsante Passo all'interno viene usato per passare alla prossima istruzione eseguibile.
    • Poiché il primo elemento nella matrice è names e l'istruzione Sophia controlla il nome if, l'espressione restituisce Sophia e l'esecuzione del codice viene spostata nel blocco di codice dell'istruzionetrue.if
  8. Sulla barra degli strumenti Controlli di debug selezionare Esegui istruzione.

  9. Si noti che l'esecuzione del codice avanza al metodo SophiaMessage e si sospende.

    Il pulsante Step Into è avanzato alla riga di codice eseguibile successiva. La riga di codice eseguibile successiva non è il numero di riga successivo nel file, è l'istruzione successiva nel percorso di esecuzione. In questo caso, l'istruzione eseguibile successiva è il punto di ingresso del SophiaMessage metodo .

  10. Sulla barra degli strumenti Controlli di debug selezionare Step Out.

  11. Nota che l'esecuzione del codice torna alla riga di codice che ha chiamato il SophiaMessage metodo e si interrompe.

  12. Prendere in considerazione il motivo per cui selezionare Step Out ha prodotto questo risultato.

    All'interno di un metodo, il pulsante Step Out completa le righe rimanenti del metodo corrente e quindi torna al contesto di esecuzione che ha invocato il metodo.

  13. Sulla barra degli strumenti Controlli di debug selezionare Esegui istruzione.

  14. Si noti che l'esecuzione del codice passa alla riga di codice seguente e sospende:

    messageText = messageText + "\n\r" + AndrewMessage();
    
  15. Prenditi un momento per riflettere sul motivo per cui l'esecuzione è avanzata a questa riga di codice.

    Sebbene l'indentazione del codice suggerisca che questa riga di codice faccia parte del blocco di codice per l'istruzione else if, in realtà non lo è. Per evitare questo bug, sarebbe stato meglio usare parentesi graffe {} per definire i blocchi di codice per questa struttura if - else if. Mentre viene scritto il codice, il messaggio di Andrew verrà aggiunto a messageText ogni iterazione del ciclo.

Verificare gli aggiornamenti del codice

Dopo aver isolato un problema nel codice, è necessario aggiornare il codice e quindi verificare che il problema sia stato risolto.

  1. Sulla barra degli strumenti Controlli debug selezionare Arresta.

  2. Dedicare qualche minuto alla correzione della logica del codice.

    Sono disponibili alcune opzioni per risolvere il problema identificato nel codice. Per esempio:

    • Puoi mantenere le righe di codice esistenti e aggiungere parentesi graffe {} alla struttura if per ogni blocco di codice.

    • È possibile unire le due righe di codice che seguono l'istruzione finale else if , formando una singola istruzione come indicato di seguito:

      else if (name == "AllGreetings")
          messageText = SophiaMessage() + "\n\r" + AndrewMessage();
      

    In entrambi i casi il codice aggiornato deve includere la chiamata a AndrewMessage all'interno del blocco di codice quando name == "AllGreetings".

  3. Nel menu File, selezionare Salva.

  4. Usare gli strumenti dell'interfaccia utente del debugger per cancellare il punto di interruzione impostato in precedenza.

  5. Nel menu Esegui selezionare Avvia debug.

  6. Verificare che il codice produa ora i risultati previsti.

    Hello, my name is Sophia.
    
    Hi, my name is Andrew. Good to meet you.
    
    Hello, my name is Sophia.
    Hi, my name is Andrew. Good to meet you.
    
  7. Sulla barra degli strumenti Controlli debug selezionare Arresta.

Congratulazioni! Il debugger di Visual Studio Code è stato usato correttamente per isolare e correggere un problema di logica.

Riepilogo

Ecco i concetti più importanti di questa unità da ricordare:

  • Usare i punti di interruzione per sospendere l'esecuzione del codice durante una sessione di debug.
  • Usare Passo Avanti dalla barra degli strumenti dei controlli del debug per osservare la prossima riga di codice eseguibile.
  • Usare Esci da istruzione/routine nella barra degli strumenti di Controlli di debug per eseguire le altre righe del metodo corrente e tornare alla riga di codice che ha chiamato il metodo.