Share via


Esercitazione: Eseguire il debug di un'applicazione console .NET con Visual Studio per Mac

Importante

Microsoft ha annunciato il ritiro di Visual Studio per Mac. Visual Studio per Mac non sarà più supportato a partire dal 31 agosto 2024. Le alternative includono:

Per altre informazioni, vedere Annuncio del ritiro di Visual Studio per Mac.

Questa esercitazione presenta gli strumenti di debug disponibili in Visual Studio per Mac.

Prerequisiti

Usare la configurazione della build di debug

Le modalità Debug e Versione sono configurazioni della build predefinite di Visual Studio. Usare la configurazione della build di debug per il debug e la configurazione di versione per la distribuzione della versione finale.

Nella configurazione di debug, un programma viene compilato con informazioni di debug simboliche complete e nessuna ottimizzazione. L'ottimizzazione rende più difficile il debug perché la relazione tra il codice sorgente e le istruzioni generate è più complessa. La configurazione di versione di un programma non dispone di informazioni di debug simbolico ed è completamente ottimizzata.

Per impostazione predefinita, Visual Studio per Mac usa la configurazione della build di debug, quindi non è necessario modificarla prima del debug.

  1. Avviare Visual Studio per Mac.

  2. Aprire il progetto creato in Creare un'applicazione console .NET con Visual Studio per Mac.

    La configurazione di compilazione corrente viene visualizzata sulla barra degli strumenti. L'immagine della barra degli strumenti seguente mostra che Visual Studio è configurato per compilare la versione di debug dell'app:

    Visual Studio toolbar with debug highlighted

Imposta punto di interruzione

Il punto di interruzione arresta temporaneamente l'esecuzione dell'applicazione prima che venga eseguita la riga con il punto di interruzione.

  1. Impostare un punto di interruzione nella riga che visualizza il nome, la data e l'ora. A tale scopo, posizionare il cursore nella riga di codice e premere \ (comando+\). Un altro modo per impostare un punto di interruzione consiste nel selezionare Debug>Attiva/Disattiva punto di interruzione dal menu.

    Visual Studio indica la riga in cui viene impostato il punto di interruzione evidenziandola e visualizzando un punto rosso sul margine sinistro.

    Visual Studio Program window with breakpoint set

  2. Premere (comando+INVIO) per avviare il programma in modalità di debug. In alternativa, per avviare il debug scegliere Debug>Avvia debug dal menu.

  3. Immettere una stringa nella finestra del terminale quando il programma chiede di specificare un nome e quindi premere INVIO.

  4. L'esecuzione del programma si arresta quando raggiunge il punto di interruzione e prima che il metodo Console.WriteLine venga eseguito.

    Screenshot of a breakpoint in Visual Studio

Usare la finestra di controllo immediato

La finestra di controllo immediato consente di interagire con l'applicazione in fase di debug. È possibile modificare in modo interattivo il valore delle variabili per osservarne l'impatto sul programma.

  1. Se la finestra di controllo immediato non è visibile, per visualizzarla scegliere Visualizza>Finestre di debug>Controllo immediato.

  2. Immettere name = "Gracie" nella finestra Controllo immediato e premere INVIO.

  3. Immettere currentDate = currentDate.AddDays(1) nella finestra Controllo immediato e premere INVIO.

    Si noti che nella finestra Controllo immediato vengono visualizzati il valore della variabile string e le proprietà del valore DateTime.

    Immediate Window in Visual Studio

    Nella finestra Variabili locali vengono visualizzati i valori delle variabili definite nel metodo attualmente in esecuzione. I valori delle variabili appena modificate vengono aggiornati nella finestra Variabili locali.

    Locals Window in Visual Studio

  4. Premere (comando+INVIO) per continuare il debug.

    I valori visualizzati nella finestra del terminale corrispondono alle modifiche apportate nella finestra Controllo immediato.

    Se il terminale non è visualizzato, selezionare Terminale - HelloWorld nella barra di spostamento inferiore.

    Terminal - Hello World in bottom navigation bar

  5. Premere un tasto qualsiasi per uscire dal programma.

  6. Chiudere la finestra del terminale.

Impostare un punto di interruzione condizionale

Il programma visualizza la stringa immessa dall'utente. Ma cosa succede se l'utente non immette alcuna stringa? È possibile testare questo comportamento con una funzionalità di debug utile denominata punto di interruzione condizionale.

  1. Premere CTRL+clic sul punto rosso che rappresenta il punto di interruzione. Nel menu di scelta rapida selezionare Modifica punto di interruzione.

  2. Nella finestra di dialogo Modifica punto di interruzione immettere il codice seguente nel campo che segue E la condizione seguente è True e selezionare Applica.

    String.IsNullOrEmpty(name)
    

    Editor showing breakpoint settings panel

    Ogni volta che viene raggiunto il punto di interruzione, il debugger chiama il metodo String.IsNullOrEmpty(name) e si interrompe in questa riga solo se la chiamata al metodo restituisce true.

    Anziché un'espressione condizionale, è possibile specificare un numero di passaggi, che interrompe l'esecuzione del programma prima che un'istruzione venga eseguita un numero specificato di volte.

  3. Premere (comando+INVIO) per avviare il debug.

  4. Nella finestra del terminale premere INVIO quando viene richiesto di immettere il proprio nome.

    Poiché la condizione specificata (name è null o String.Empty) è stata soddisfatta, l'esecuzione del programma si arresta quando raggiunge il punto di interruzione.

  5. Selezionare la finestra Variabili locali, che mostra i valori delle variabili locali per il metodo attualmente in esecuzione. In questo caso, Main è il metodo attualmente in esecuzione. Si noti che il valore della variabile name è "", ovvero String.Empty.

  6. È anche possibile osservare che il valore è una stringa vuota immettendo il nome della variabile name nella finestra Controllo immediato e premendo INVIO.

    Immediate window showing name is an empty string

  7. Premere (comando+INVIO) per continuare il debug.

  8. Nella finestra del terminale premere un tasto qualsiasi per uscire dal programma.

  9. Chiudere la finestra del terminale.

  10. Cancellare il punto di interruzione facendo clic sul punto nel margine sinistro della finestra del codice. In alternativa, per cancellare un punto di interruzione è possibile scegliere Debug > Attiva/Disattiva punto di interruzione mentre è selezionata la riga di codice.

Scorrere un programma istruzione per istruzione

Visual Studio consente anche di esaminare il programma una riga alla volta e di monitorarne l'esecuzione. In genere, si imposta un punto di interruzione e si segue il flusso del programma attraverso una piccola parte del codice del programma. Poiché questo programma è piccolo, è possibile scorrere l'intero programma un'istruzione alla volta.

  1. Impostare un punto di interruzione sulla parentesi graffa che contrassegna l'inizio del metodo Main (premere comando+\).

  2. Premere (comando+INVIO) per avviare il debug.

    Visual Studio si arresta sulla riga con il punto di interruzione.

  3. Premere I (MAIUSC+comando+I) o selezionare Debug>Esegui istruzione per avanzare di una riga.

    Visual Studio evidenzia e visualizza una freccia accanto alla riga di esecuzione successiva.

    Visual Studio step into method

    A questo punto, la finestra Variabili locali mostra che la matrice args è vuota, e name e currentDate hanno valori predefiniti. Visual Studio, inoltre, ha aperto un terminale vuoto.

  4. Premere I (MAIUSC+comando+I).

    Visual Studio evidenzia l'istruzione che include l'assegnazione della variabile name. La finestra Variabili locali mostra che name è null, e il terminale visualizza la stringa "What is your name?" (Come ti chiami?).

  5. Rispondere al prompt immettendo una stringa nella finestra della console e premendo INVIO.

  6. Premere I (MAIUSC+comando+I).

    Visual Studio evidenzia l'istruzione che include l'assegnazione della variabile currentDate. Nella finestra Variabili locali viene visualizzato il valore restituito dalla chiamata al metodo Console.ReadLine. Il terminale visualizza la stringa immessa al prompt.

  7. Premere I (MAIUSC+comando+I).

    Nella finestra Variabili locali viene visualizzato il valore della variabile currentDate dopo l'assegnazione dalla proprietà DateTime.Now. Il terminale è invariato.

  8. Premere I (MAIUSC+comando+I).

    Visual Studio chiama il metodo Console.WriteLine(String, Object, Object). Il terminale visualizza la stringa formattata.

  9. Premere U (MAIUSC+comando+U) o selezionare Esegui>Esci da istruzione/routine.

    Il terminale visualizza un messaggio e attende che venga premuto un tasto.

  10. Premere un tasto qualsiasi per uscire dal programma.

Usare la configurazione della build di versione

Dopo aver testato la versione di debug dell'applicazione, è necessario compilare e testare anche la versione finale. La versione finale incorpora le ottimizzazioni del compilatore che possono influire negativamente sul comportamento di un'applicazione. Ad esempio, le ottimizzazioni del compilatore progettate per migliorare le prestazioni possono creare scenari di race condition nelle applicazioni multithreading.

Per compilare e testare la versione finale dell'applicazione console, seguire questa procedura:

  1. Modificare la configurazione della build nella barra degli strumenti da Debug a Versione.

    default Visual Studio toolbar with release highlighted

  2. Premere (opzione+comando+INVIO) per avviare l'esecuzione senza eseguire il debug.

Passaggi successivi

In questa esercitazione sono stati usati gli strumenti di debug di Visual Studio. Nell'esercitazione successiva si pubblicherà una versione distribuibile dell'app.