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.

Annotazioni

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 di un programma contatore di 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.


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 Impostazioni punto di interruzione .

  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 che mostra l'inizializzazione del punto di interruzione nel codice di esempio.

  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 che mostra la finestra punto di interruzione.

  4. Selezionare la casella di controllo Azione .

    Screenshot della finestra del punto di interruzione con casella Azioni selezionata.

    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 della finestra del punto di interruzione con la casella Condizioni selezionata.

    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 Impostazioni punto di interruzione .

  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 che mostra l'inizializzazione del punto di interruzione nel codice di esempio.

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

    Screenshot che mostra la finestra punto di interruzione.

  3. Selezionare la casella di controllo Azione .

    Screenshot della finestra del punto di interruzione con casella Azioni selezionata.

    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 della finestra del punto di interruzione con la casella Condizioni selezionata.

    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 che mostra il messaggio di output del contatore.

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

Screenshot che mostra il messaggio Azioni nella finestra di output.

È 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).

Keyword Cosa viene visualizzato
$ADDRESS Istruzione corrente
$CALLER Nome della funzione chiamante
$CALLSTACK Stack di chiamate
$FUNCTION Nome della funzione corrente
$PID ID del processo
$PNAME Nome del processo
$TID Thread ID
$TNAME Nome 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 che mostra il messaggio di output del contatore.

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

Screenshot che mostra il messaggio Azioni nella finestra di output.

È 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).

Keyword Cosa viene visualizzato
$ADDRESS Istruzione corrente
$CALLER Nome della funzione chiamante
$CALLSTACK Stack di chiamate
$FUNCTION Nome della funzione corrente
$PID ID del processo
$PNAME Nome del processo
$TID Thread ID
$TNAME Nome 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 che mostra l'espressione condizionale è 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 che mostra quando viene modificata l'espressione condizionale.

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 Impostazioni punto di interruzione . È possibile scegliere qualsiasi punto di interruzione dall'elenco di scelte.

Screenshot che mostra l'abilitazione quando viene selezionato un punto di interruzione.

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

Ottenere assistenza per l'intelligenza artificiale

Se si ha Copilot, è possibile ottenere assistenza per l'intelligenza artificiale durante la creazione di un punto di traccia. Copilot offre suggerimenti per punti di interruzione condizionali e punti di traccia specifici del codice.

Screenshot di Copilot che usa i suggerimenti del punto di interruzione condizionale.

Per altre informazioni, vedere Debug con Copilot.

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 che mostra l'espressione condizionale è 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 che mostra quando viene modificata l'espressione condizionale.

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.

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 che mostra il numero di passaggi dell'espressione condizionale.

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 che mostra il numero di passaggi dell'espressione condizionale.

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

Screenshot che mostra Rimuovi punto di interruzione al primo hit.

Filter

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

Screenshot che mostra il filtro dell'espressione condizionale.

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 che mostra il filtro dell'espressione condizionale.

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.