Esercizio - Impostare punti di interruzione
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.
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."; }Usare gli strumenti del debugger di Visual Studio Code per impostare un punto di interruzione nella prima riga di codice all'interno del
foreachciclo.
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
Runmenu e i tasti di scelta rapida.Nel menu Esegui selezionare Avvia debug.
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.

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.
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
SophiaMessagealla variabile stringamessageText.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 è
namese l'istruzioneSophiacontrolla il nomeif, l'espressione restituisceSophiae l'esecuzione del codice viene spostata nel blocco di codice dell'istruzionetrue.if
Sulla barra degli strumenti Controlli di debug selezionare Esegui istruzione.
Si noti che l'esecuzione del codice avanza al metodo
SophiaMessagee 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
SophiaMessagemetodo .Sulla barra degli strumenti Controlli di debug selezionare Step Out.
Nota che l'esecuzione del codice torna alla riga di codice che ha chiamato il
SophiaMessagemetodo e si interrompe.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.
Sulla barra degli strumenti Controlli di debug selezionare Esegui istruzione.
Si noti che l'esecuzione del codice passa alla riga di codice seguente e sospende:
messageText = messageText + "\n\r" + AndrewMessage();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 strutturaif - else if. Mentre viene scritto il codice, il messaggio di Andrew verrà aggiunto amessageTextogni 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.
Sulla barra degli strumenti Controlli debug selezionare Arresta.
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 strutturaifper 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
AndrewMessageall'interno del blocco di codice quandoname == "AllGreetings".Nel menu File, selezionare Salva.
Usare gli strumenti dell'interfaccia utente del debugger per cancellare il punto di interruzione impostato in precedenza.
Nel menu Esegui selezionare Avvia debug.
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.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.