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.
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.
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.
Passare il puntatore del mouse sul cerchio rosso e quindi fare clic sull'icona a forma di ingranaggio.
Questa azione apre la finestra Impostazioni punto di interruzione.
Selezionare la casella di controllo Azione .
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.
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.
Se si desidera aggiungere condizioni che determinano se viene visualizzato il messaggio, selezionare la casella di controllo Condizioni .
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.
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.
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.
Selezionare la casella di controllo Azione .
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.
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.
Se si desidera aggiungere condizioni che determinano se viene visualizzato il messaggio, selezionare la casella di controllo Condizioni .
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.
Se si fa clic su Chiudi e quindi si esegue il debug del programma (F5), viene visualizzato l'output seguente nella finestra 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).
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.
Se si fa clic su Chiudi e quindi si esegue il debug del programma (F5), viene visualizzato l'output seguente nella finestra 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).
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.
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.
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.
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.
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.
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.
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.
È anche possibile rimuovere il punto di interruzione al primo hit abilitando la casella di controllo Rimuovi punto di interruzione una volta raggiunto.
Filtro
Per una condizione di filtro, specificare i dispositivi, i processi o l'output dei thread visualizzati.
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
), ||
(), !
(NOT
OR
) e parentesi.
Per una condizione di filtro, specificare i dispositivi, i processi o l'output dei thread visualizzati.
Elenco di espressioni di filtro:
MachineName
= "name"ProcessId
= valoreProcessName
= "name"ThreadId
= valoreThreadName
= "name"
Racchiudere le stringhe (ad esempio i nomi) tra virgolette doppie. I valori possono essere immessi senza virgolette. È possibile combinare clausole usando &
(AND
), ||
(), !
(NOT
OR
) 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.