Informazioni sul debugger .NET in Visual Studio Code
Nell'unità precedente si è appreso che un debugger consente di controllare l'esecuzione del programma e osservarne lo stato. In questa sezione si apprenderà come eseguire entrambe le attività in Visual Studio Code.
Per iniziare, si apprenderà come configurare il debugger di Visual Studio Code per usarlo con .NET.
Configurare Visual Studio Code per il debug .NET
Quando si apre un file C# in Visual Studio Code per la prima volta, viene visualizzata la richiesta di installare le estensioni consigliate per C#.
Visual Studio Code installerà l'estensione C# e visualizzerà un prompt aggiuntivo per aggiungere gli asset necessari per compilare ed eseguire il debug del progetto.
Annotazioni
Il supporto del linguaggio C# in Visual Studio Code è un'installazione facoltativa da Marketplace. Visual Studio Code richiede automaticamente di installare questa estensione quando si apre un file C# se non è ancora stato fatto. Se si verificano problemi durante la compilazione o il debug dell'applicazione .NET in Visual Studio Code, è necessario verificare che il progetto disponga degli asset necessari per il supporto del linguaggio C#.
Punti di interruzione
Come si è appreso nell'unità precedente, un debugger consente di analizzare e controllare l'esecuzione del programma. Quando si avvia il debugger di Visual Studio Code, inizia immediatamente l'esecuzione del codice. Poiché il codice viene eseguito rapidamente, è necessario essere in grado di sospendere il programma in corrispondenza di qualsiasi istruzione. A tale scopo, si useranno i punti di interruzione.
È possibile aggiungere un punto di interruzione in Visual Studio Code facendo clic sul lato sinistro del numero di riga nella riga che si desidera interrompere. Quando il punto di interruzione è abilitato, viene visualizzato un cerchio rosso. Per rimuoverlo, fare di nuovo clic sul cerchio rosso.
Se si fa clic con il pulsante destro del mouse per aggiungere un punto di interruzione, è anche possibile selezionare Aggiungi punto di interruzione condizionale. Questo particolare tipo di punto di interruzione consente di immettere una condizione per l'interruzione dell'esecuzione. Questo punto di interruzione sarà attivo solo quando viene soddisfatta la condizione specificata. È anche possibile modificare un punto di interruzione esistente facendo clic con il pulsante destro del mouse su di esso e scegliendo Modifica punto di interruzione.
Panoramica del debugger di Visual Studio Code
Dopo aver configurato i punti di interruzione e aver avviato l'app, vengono visualizzati nuovi pannelli informativi e controlli sullo schermo.
- Controlli di avvio del debugger
- Stato delle variabili
- Stato delle variabili di controllo
- Stack di chiamate corrente
- Punti di interruzione
- Controlli di esecuzione
- Fase corrente di esecuzione
- Console di debug
Controlli di avvio del debugger
Nella parte superiore della barra laterale è possibile trovare i controlli di avvio:
- Avviare il debug.
- Selezionare la configurazione di avvio attiva.
- Modificare il file
launch.json. Crealo se necessario. - Aprire il terminale di debug.
Visualizzare e modificare lo stato delle variabili
Quando si analizza la causa di un difetto del programma, controllare lo stato delle variabili per cercare modifiche impreviste. A tale scopo, è possibile usare il pannello Variabili .
Le variabili vengono visualizzate in base all'ambito:
- Variabili locali: accessibili nell'ambito corrente, in genere la funzione corrente.
- Variabili globali: accessibili ovunque nel programma. Anche gli oggetti di sistema del runtime JavaScript sono inclusi, quindi non sorprendetevi se ci sono molte cose.
- Variabili di chiusura: accessibili dalla chiusura corrente, se presenti. Una chiusura combina l'ambito locale di una funzione con l'ambito della funzione esterna a cui appartiene.
È possibile espandere ambiti e variabili selezionando la freccia. Quando si espandono gli oggetti, vengono visualizzate tutte le proprietà definite al loro interno.
È possibile modificare il valore di una variabile facendo doppio clic sulla variabile.
Passando il mouse su un parametro di funzione o una variabile direttamente nella finestra dell'editor, è anche possibile visualizzarne in anteprima il valore.
Controllare le variabili
Può essere noioso cercare uno stato di variabile ogni volta che si vuole monitorarlo tra le funzioni temporali o diverse. È qui che il pannello Watch è utile.
È possibile selezionare il pulsante Plus per immettere un nome di variabile o un'espressione da controllare. In alternativa, è possibile fare clic con il pulsante destro del mouse su una variabile nel pannello Variabili e scegliere Aggiungi per guardare.
Tutte le espressioni all'interno del pannello di controllo vengono aggiornate automaticamente durante l'esecuzione del codice.
Stack di chiamate
Ogni volta che il programma immette una funzione, viene aggiunta una voce allo stack di chiamate. Quando l'applicazione diventa complessa e sono presenti funzioni chiamate all'interno di funzioni molte volte, lo stack di chiamate rappresenta il percorso delle chiamate di funzioni.
È utile per trovare l'origine di un'eccezione. Se si verifica un arresto anomalo imprevisto nel programma, nella console verrà spesso visualizzato un elemento simile all'esempio seguente:
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
at OrderProcessor.OrderQueue.ProcessNewOrders(String[] orderIds) in C:\Users\Repos\OrderProcessor\OrderQueue.cs:line 12
at OrderProcessor.Program.Main(String[] args) in C:\Users\Repos\OrderProcessor\Program.cs:line 9
Il gruppo di righe at [...] sotto il messaggio di errore è detto analisi dello stack. L'analisi dello stack specifica il nome e l'origine di ogni funzione che è stata chiamata prima di terminare con l'eccezione. Può essere un po' difficile da decifrare, perché include anche funzioni interne dal runtime .NET.
Ecco dove è disponibile il pannello Stack di chiamate di Visual Studio Code. Filtra le informazioni indesiderate per visualizzare solo le funzioni rilevanti dal codice per impostazione predefinita. È quindi possibile rimuovere questo stack di chiamate per individuare da dove è stata originata l'eccezione.
Pannello Punti di interruzione
Nel pannello Punti di interruzione è possibile visualizzare e attivare o disattivare tutti i punti di interruzione inseriti nel codice. È anche possibile attivare/disattivare le opzioni per l'interruzione in corrispondenza di eccezioni rilevate o non rilevate. È possibile usare il pannello Punti di interruzione per esaminare lo stato del programma e tracciare l'origine di un'eccezione usando lo stack di chiamate quando si verifica un'eccezione.
Controllare l'esecuzione
È possibile controllare il flusso di esecuzione del programma usando questi controlli.
Da sinistra a destra, i controlli sono:
- Continuare o sospendere l'esecuzione: se l'esecuzione viene sospesa, continuerà fino a quando non viene raggiunto il punto di interruzione successivo. Se il programma è in esecuzione, il pulsante cambia in Sospendi esecuzione, utilizzabile per sospendere l'esecuzione.
- Passo avanti: Esegue l'istruzione di codice successiva nel contesto attuale.
- Entrare: Come Saltare, ma se l'istruzione successiva è una chiamata di funzione, passa alla prima istruzione di codice di questa funzione (come il comando
step). - Esci: Se sei all'interno di una funzione, esegui il codice rimanente di questa funzione e ritorna all'istruzione dopo la chiamata iniziale della funzione (stesso del comando
out). - Riavvia: riavviare il programma dall'inizio.
- Arresto: terminare l'esecuzione e uscire dal debugger.
Usare la console di debug
È possibile visualizzare o nascondere la console di debug selezionando CTRL+MAIUSC+Y per Windows e Linux. Selezionare CMD+MAIUSC+Y per Mac. È possibile usare la console di debug per visualizzare i log della console dell'applicazione. È anche possibile usarlo per valutare le espressioni o eseguire codice nel contenuto di esecuzione corrente, ad esempio comandi o nomi di variabili nel debugger .NET predefinito.
È possibile immettere un'espressione .NET nel campo di input nella parte inferiore della console di debug, quindi selezionare Invio per valutarlo. Il risultato viene visualizzato direttamente nella console.
Usando la console di debug, è possibile controllare rapidamente un valore di variabile, testare una funzione con valori diversi o modificare lo stato corrente.
Annotazioni
Anche se la console di debug è molto utile per l'esecuzione e la valutazione del codice .NET, può risultare poco confusa quando si tenta di eseguire o eseguire il debug di un'applicazione console .NET perché la console di debug non accetta l'input del terminale per un programma in esecuzione.
Per gestire l'input del terminale durante il debug, è possibile usare il terminale integrato (una delle finestre di Visual Studio Code) o un terminale esterno. Per questa esercitazione si userà il terminale integrato.
Apri .vscode/launch.json.
Modificare l'impostazione
consoleinintegratedTerminalda:"console": "internalConsole",A:
"console": "integratedTerminal",Salvare le modifiche.
Nell'unità successiva si apprenderà come usare il debugger per correggere il bug nel codice di Fibonacci illustrato in precedenza.