Condividi tramite


Registrare le informazioni nella finestra Output usando i punti di traccia in Visual Studio

I punti di traccia consentono di registrare le informazioni nella finestra Output in condizioni configurabili senza modificare o arrestare il codice. Questa funzionalità è supportata sia per i linguaggi gestiti (C#, Visual Basic, F#) che per il codice nativo, nonché per i linguaggi come JavaScript e Python.

Nota

Per informazioni sulla registrazione delle informazioni nella finestra Output a livello di codice tramite le API .NET, vedere Inviare messaggi alla finestra Output.

Di seguito è riportato un esempio

Il programma di esempio seguente è un ciclo semplice for con una variabile contatore che aumenta di uno ogni volta che il ciclo esegue un'altra iterazione.

Screenshot of a sample counter program.

Il programma di esempio seguente è un ciclo semplice for con una variabile contatore che aumenta di uno ogni volta che il ciclo esegue un'altra iterazione.


using System.Diagnostics;

namespace Tracepoints
{
    public class Program
    {
        public static void Main(string[] args)
        {
            int counter = 0;
            for (int i=0; i<=10; i++)
            {
                counter +=1;
            }
        }
    }
}

Impostare punti di traccia nel codice sorgente

È possibile impostare i punti di traccia specificando una stringa di output nella casella di controllo Azione nella finestra Punto di interruzione Impostazioni.

  1. Per inizializzare un punto di traccia, fare prima clic sulla barra a sinistra del numero di riga in cui si desidera impostare il punto di traccia.

    Screenshot showing the Breakpoint Initialization in the sample code.

  2. Passare il puntatore del mouse sul cerchio rosso e quindi fare clic sull'icona a forma di ingranaggio.

  3. Questa azione apre la finestra Impostazioni punto di interruzione.

    Screenshot showing Breakpoint Window.

  4. Selezionare la casella di controllo Azione .

    Screenshot of breakpoint window with Actions Box checked.

    Si noti che il cerchio rosso cambia in un diamante che indica che si è passati da un punto di interruzione a un punto di traccia.

  5. Immettere il messaggio che si vuole accedere alla casella di testo Mostra un messaggio nella finestra di output . Per informazioni dettagliate, vedere le sezioni successive di questo articolo.

    Il punto di traccia è ora impostato. Premere il pulsante "Chiudi" se tutto quello che si vuole fare è registrare alcune informazioni nella finestra di output.

  6. Se si desidera aggiungere condizioni che determinano se viene visualizzato il messaggio, selezionare la casella di controllo Condizioni .

    Screenshot of breakpoint window with Conditions Box checked.

    Sono disponibili tre opzioni per le condizioni: Espressione condizionale, Filtro e Numero di passaggi.

È possibile impostare i punti di traccia specificando una stringa di output nella casella di controllo Azione nella finestra Punto di interruzione Impostazioni.

  1. Per inizializzare un punto di traccia, fare prima clic sulla barra a sinistra del numero di riga in cui si desidera impostare il punto di traccia.

    Screenshot showing the Breakpoint Initialization in the sample code.

  2. Passare il puntatore del mouse sul cerchio rosso e fare clic sull'icona a forma di ingranaggio per aprire la finestra Punto di interruzione Impostazioni.

    Screenshot showing Breakpoint Window.

  3. Selezionare la casella di controllo Azione .

    Screenshot of breakpoint window with Actions Box checked.

    Si noti che il cerchio rosso cambia in un diamante che indica che si è passati da un punto di interruzione a un punto di traccia.

  4. Immettere il messaggio che si vuole accedere alla casella di testo Mostra un messaggio nella finestra di output . Per informazioni dettagliate, vedere le sezioni successive di questo articolo.

    Il punto di traccia è ora impostato. Premere il pulsante "Chiudi" se tutto quello che si vuole fare è registrare alcune informazioni nella finestra di output.

  5. Se si desidera aggiungere condizioni che determinano se viene visualizzato il messaggio, selezionare la casella di controllo Condizioni .

    Screenshot of breakpoint window with Conditions Box checked.

    Sono disponibili tre opzioni per le condizioni: Espressione condizionale, Filtro e Numero di passaggi.

Menu Azioni

Questo menu consente di registrare un messaggio nella finestra Output. Digitare le stringhe da restituire nella finestra di messaggio (senza virgolette necessarie). Per visualizzare i valori delle variabili, assicurarsi di racchiuderlo tra parentesi graffe.

Ad esempio, se si desidera visualizzare il valore della variabile nella console di counter output, digitare {counter} nella casella di testo del messaggio.

Screenshot showing Counter Output Message.

Se si fa clic su Chiudi e quindi si esegue il debug del programma (F5), viene visualizzato l'output seguente nella finestra Output.

Screenshot showing Actions Message In Output Window.

È anche possibile usare parole chiave speciali per visualizzare informazioni più specifiche. Immettere la parola chiave esattamente come illustrato di seguito (usare un "$" davanti a ogni parola chiave e tutte le maiuscole per la parola chiave stessa).

Parola chiave Cosa viene visualizzato
$ADDRESS Istruzione corrente
$CALLER Scegliere il nome della funzione
$CALLSTACK Stack di chiamate
$FUNCTION Nome della funzione corrente
$PID Process ID
$PNAME Nome processo
$TID ID thread
$TNAME Nome del thread
$TICK Tick count (from Windows GetTickCount)

Questo menu consente di registrare un messaggio nella finestra Output. Digitare le stringhe da restituire nella finestra di messaggio (senza virgolette necessarie). Per visualizzare i valori delle variabili, assicurarsi di racchiuderlo tra parentesi graffe.

Ad esempio, se si desidera visualizzare il valore della variabile nella console di counter output, digitare {counter} nella casella di testo del messaggio.

Screenshot showing Counter Output Message.

Se si fa clic su Chiudi e quindi si esegue il debug del programma (F5), viene visualizzato l'output seguente nella finestra Output.

Screenshot showing Actions Message In Output Window.

È anche possibile usare parole chiave speciali per visualizzare informazioni più specifiche. Immettere la parola chiave esattamente come illustrato di seguito (usare un "$" davanti a ogni parola chiave e tutte le maiuscole per la parola chiave stessa).

Parola chiave Cosa viene visualizzato
$ADDRESS Istruzione corrente
$CALLER Scegliere il nome della funzione
$CALLSTACK Stack di chiamate
$FUNCTION Nome della funzione corrente
$PID Process ID
$PNAME Nome processo
$TID ID thread
$TNAME Nome del thread
$TICK Tick count (from Windows GetTickCount)

Menu Condizioni

Le condizioni consentono di filtrare i messaggi di output, in modo che vengano visualizzati solo in determinati scenari. Sono disponibili tre tipi principali di condizioni.

Espressione condizionale

Per un'espressione condizionale, un messaggio di output viene visualizzato solo quando vengono soddisfatte determinate condizioni.

Per le espressioni condizionali, è possibile impostare il punto di traccia per restituire un messaggio quando una determinata condizione è true o quando è stata modificata. Ad esempio, se si desidera visualizzare solo il valore del contatore durante le iterazioni del ciclo, è possibile selezionare l'opzione È true e quindi digitare i%2 == 0 nella casella di for testo del messaggio.

Screenshot showing Conditional Expression Is True.

Se si desidera stampare il valore del contatore quando viene modificata l'iterazione del for ciclo, selezionare l'opzione Quando è stata modificata e digitare i nella casella di testo del messaggio.

Screenshot showing when Conditional Expression is Changed.

Il comportamento dell'opzione When changed è diverso per i diversi linguaggi di programmazione.

  • Per il codice nativo, il debugger non considera la prima valutazione della condizione come una modifica, quindi non raggiunge il punto di traccia nella prima valutazione.
  • Per il codice gestito, il debugger raggiunge il punto di traccia nella prima valutazione dopo l'opzione Quando è stata selezionata la modifica .

Per un'analisi più completa delle espressioni valide che è possibile usare durante l'impostazione delle condizioni, vedere Espressioni nel debugger.

Per un'espressione condizionale, un messaggio di output viene visualizzato solo quando vengono soddisfatte determinate condizioni.

Per le espressioni condizionali, è possibile impostare il punto di traccia per restituire un messaggio quando una determinata condizione è true o quando è stata modificata. Ad esempio, se si desidera visualizzare solo il valore del contatore durante le iterazioni del ciclo, è possibile selezionare l'opzione È true e quindi digitare i%2 == 0 nella casella di for testo del messaggio.

Screenshot showing Conditional Expression Is True.

Se si desidera stampare il valore del contatore quando viene modificata l'iterazione del for ciclo, selezionare l'opzione Quando è stata modificata e digitare i nella casella di testo del messaggio.

Screenshot showing when Conditional Expression is Changed.

Il comportamento dell'opzione When changed è diverso per i diversi linguaggi di programmazione.

  • Per il codice nativo, il debugger non considera la prima valutazione della condizione come una modifica, quindi non raggiunge il punto di traccia nella prima valutazione.
  • Per il codice gestito, il debugger raggiunge il punto di traccia nella prima valutazione dopo l'opzione Quando è stata selezionata la modifica .

È anche possibile impostare la condizione quando il punto di traccia può essere abilitato inserendo un punto di interruzione in una sezione specifica del codice e selezionando la casella di controllo Abilita solo quando viene raggiunto il punto di interruzione seguente: opzione nel menu Punto di interruzione Impostazioni. È possibile scegliere qualsiasi punto di interruzione dall'elenco di scelte.

Screenshot showing enable when a breakpoint is hit checked.

Per un'analisi più completa delle espressioni valide che è possibile usare durante l'impostazione delle condizioni, vedere Espressioni nel debugger.

Numero di passaggi

Una condizione di hit count consente di inviare l'output solo dopo la riga di codice in cui è impostato il punto di traccia è stato eseguito un numero specificato di volte.

Per il numero di passaggi, è possibile scegliere di restituire un messaggio quando la riga di codice in cui è impostato il punto di traccia è stato eseguito un determinato numero di volte. In base al requisito, può essere uguale o è un multiplo di oppure è maggiore o uguale al valore del numero di passaggi specificato. Scegliere l'opzione più adatta alle proprie esigenze e digitare un valore intero nel campo (ad esempio, 5) che rappresenta l'iterazione di interesse.

Screenshot showing Conditional Expression Hit Count.

Una condizione di hit count consente di inviare l'output solo dopo la riga di codice in cui è impostato il punto di traccia è stato eseguito un numero specificato di volte.

Per il numero di passaggi, è possibile scegliere di restituire un messaggio quando la riga di codice in cui è impostato il punto di traccia è stato eseguito un determinato numero di volte. In base al requisito, può essere uguale o è un multiplo di oppure è maggiore o uguale al valore del numero di passaggi specificato. Scegliere l'opzione più adatta alle proprie esigenze e digitare un valore intero nel campo (ad esempio, 5) che rappresenta l'iterazione di interesse.

Screenshot showing Conditional Expression Hit Count.

È anche possibile rimuovere il punto di interruzione al primo hit abilitando la casella di controllo Rimuovi punto di interruzione una volta raggiunto.

Screenshot showing Remove breakpoint on first hit.

Filtro

Per una condizione di filtro, specificare i dispositivi, i processi o l'output dei thread visualizzati.

Screenshot showing Conditional Expression Filter.

Elenco di espressioni di filtro:

  • MachineName = "name"
  • ProcessId = value
  • ProcessName = "name"
  • ThreadId = value
  • ThreadName = "name"

Racchiudere le stringhe (ad esempio i nomi) tra virgolette doppie. I valori possono essere immessi senza virgolette. È possibile combinare clausole usando & (AND), || (), ! (NOTOR) e parentesi.

Per una condizione di filtro, specificare i dispositivi, i processi o l'output dei thread visualizzati.

Screenshot showing Conditional Expression Filter.

Elenco di espressioni di filtro:

  • MachineName = "name"
  • ProcessId = valore
  • ProcessName = "name"
  • ThreadId = valore
  • ThreadName = "name"

Racchiudere le stringhe (ad esempio i nomi) tra virgolette doppie. I valori possono essere immessi senza virgolette. È possibile combinare clausole usando & (AND), || (), ! (NOTOR) e parentesi.

Considerazioni

Anche se i punti di traccia sono progettati per rendere il debug un'esperienza più pulita e più fluida. Ci sono alcune considerazioni da tenere presenti quando si tratta di usarle.

In alcuni casi, quando si esamina una proprietà o un attributo di un oggetto, il relativo valore può cambiare. Se il valore cambia durante l'ispezione, non è un bug causato dalla funzionalità stessa del punto di traccia. Tuttavia, l'uso di punti di traccia per controllare gli oggetti non evita queste modifiche accidentali.

Il modo in cui le espressioni vengono valutate nella finestra di messaggio Azione può essere diversa dal linguaggio attualmente in uso per lo sviluppo. Ad esempio, per restituire una stringa non è necessario eseguire il wrapping di un messaggio tra virgolette anche se normalmente si usa Debug.WriteLine() o console.log(). Inoltre, la sintassi tra parentesi graffe ({ }) per le espressioni di output può anche essere diversa dalla convenzione per l'output dei valori nel linguaggio di sviluppo. Tuttavia, il contenuto all'interno delle parentesi graffe ({ }) deve comunque essere scritto usando la sintassi del linguaggio di sviluppo.

Se si sta provando a eseguire il debug di un'applicazione live e si sta cercando una funzionalità simile, vedere la funzionalità del punto di log nel debugger snapshot. Il debugger di snapshot è uno strumento usato per analizzare i problemi nelle applicazioni di produzione. I punti di log consentono anche di inviare messaggi alla finestra di output senza dover modificare il codice sorgente e non influiscono sull'applicazione in esecuzione. Per altre informazioni, vedere Eseguire il debug di un'applicazione Azure in tempo reale.