Condividi tramite


Punti di interruzione: utilizzare passaggi, funzioni sullo stack di chiamate e condizioni per interrompere nel punto e nel momento desiderati il debugger di Visual Studio

Impostare i punti di interruzione per le righe di codice sorgente, le istruzioni di assembly e la funzione dello stack di chiamate. Specificare le condizioni, il numero di passaggi e il percorso di esecuzione. Stampare con i punti di analisi. Salvare e importare i punti di interruzione.

Contenuto

Create breakpoints that break when you want

Set a breakpoint at a source line, assembly instruction, or call stack function

Access the advanced functionality of breakpoints

Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Print to the Output window with tracepoints

Manage breakpoints in the Breakpoints window

Troubleshoot breakpoints

Breakpoint Glyphs Reference

Creare punti di interruzione che si interrompono al momento desiderato

I punti di interruzione standard, che interrompono l'esecuzione del debugger ogni volta che viene raggiunto il percorso di un file di origine, sono una delle principali tecniche di debug a disposizione dello sviluppatore nella casella degli strumenti. In Visual Studio è possibile andare oltre i punti di interruzione standard per ottenere un controllo accurato sul momento e sul percorso di esecuzione di un punto di interruzione.

  • È possibile impostare punti di interruzione di runtime che arrestano l'esecuzione quando il programma torna a una funzione nello stack di chiamate ed evitano una lunga serie di comandi Esci da istruzione/routine.

  • Se si ritiene che un ciclo nel codice inizi a presentare un comportamento errato dopo alcune iterazioni, è possibile impostare un punto di interruzione per arrestare l'esecuzione dopo un numero specificato di passaggi alla riga di codice associata, anziché premere ripetutamente F5 (Debug, Continua) per raggiungere il livello di iterazione.

  • Tramite le espressioni di codice, è possibile specificare le condizioni esatte in cui un punto di interruzione viene interrotto.

È possibile usare la finestra Punti di interruzione per gestire lo stato e il comportamento di numerosi punti di interruzione. Se si è costruita con attenzione una sequenza di punti di interruzione per diagnosticare un problema comune o particolarmente complesso, è possibile salvare o condividere tali punti d'interruzione mediante i comandi di importazione ed esportazione della finestra Punti di interruzione.

Avviso

Evitare l'impostazione dei punti di interruzione su componenti di sistema durante il debug in modalità mista di codice nativo e gestito.Tale operazione potrebbe infatti provocare l'interruzione di Common Language Runtime e il blocco del debugger.

Torna all'inizioContents

Impostare un punto di interruzione in corrispondenza di una riga di codice sorgente, un'istruzione di assembly o una funzione dello stack di chiamate

  • Set a breakpoint in a source file • Set a breakpoint at a function return in the Call Stack window • Set a breakpoint at an assembly instruction in the Disassembly window

Impostare un punto di interruzione in un file di origine

Di seguito sono riportate due tecniche per impostare un punto di interruzione standard in una finestra di origine:

  • Fare doppio clic sulla barra della finestra in corrispondenza della riga in cui interrompere l'esecuzione.

    -oppure-

  • Selezionare la riga e scegliere F9.

Punto di interruzione nella finestra Stack di chiamate

L'icona del punto di interruzione viene visualizzata nella barra.

Per rilevare visivamente i punti di interruzione durante l'esecuzione del codice, vedere Mappare i metodi sullo stack di chiamate durante il debug in Visual Studio.

Torna all'inizio Set a breakpoint at a source line, assembly instruction, or call stack function

Torna all'inizioContents

Impostare un punto di interruzione in corrispondenza del valore restituito di una funzione nella finestra Stack di chiamate

È possibile interrompere l'esecuzione in corrispondenza dell'istruzione o della riga restituita da una funzione chiamante impostando un punto di interruzione nella finestra Stack di chiamate. Il debugger deve essere in modalità di interruzione.

  • Aprire la finestra Stack di chiamate (tasto di scelta rapida Ctrl + Alt + C) e selezionare la funzione chiamante in corrispondenza della quale interrompere l'esecuzione.

  • Scegliere Punto di interruzione, Inserisci punto di interruzione dal menu di scelta rapida oppure utilizzare il tasto di scelta rapida F9.

Sul margine sinistro, accanto al nome della chiamata di funzione, verrà visualizzato il simbolo del punto di interruzione.

Punto di interruzione nella finestra Stack di chiamate

Se si apre la finestra Punti di interruzione (tasto di scelta rapida CTRL + ALT + B), il punto di interruzione viene visualizzato come punto di interruzione di indirizzo con una posizione di memoria corrispondente alla successiva istruzione eseguibile nella funzione. Il debugger interrompe l'esecuzione in corrispondenza dell'istruzione.

Punto di interruzione stack di chiamate nella finestra Punti di interruzione

Per rilevare visivamente i punti di interruzione durante l'esecuzione del codice, vedere Mappare i metodi sullo stack di chiamate durante il debug in Visual Studio.

Torna all'inizio Set a breakpoint at a source line, assembly instruction, or call stack function

Torna all'inizio Contents

Impostare un punto di interruzione in corrispondenza di un'istruzione di assembly nella finestra Disassembly

Per impostare un punto di interruzione in corrispondenza di un'istruzione di assembly, è necessario che il debugger sia in modalità di interruzione.

  1. Aprire la finestra Disassembly (tasto di scelta rapida Ctrl + Alt + D).

  2. Eseguire una delle operazioni seguenti:

    1. Fare doppio clic sulla barra della finestra in corrispondenza della riga in cui interrompere l'esecuzione.

      -oppure-

    2. Selezionare la riga e scegliere F9.

Torna all'inizio Set a breakpoint at a source line, assembly instruction, or call stack function

Torna all'inizio Contents

Accedere alla funzionalità avanzata dei punti di interruzione

Menu di scelta rapida Punto di interruzione

In una finestra di origine, nella finestra Stack di chiamate o nella finestra Disassembly, aprire il menu di scelta rapida per il punto di interruzione e scegliere la proprietà.

Nella finestra Punti di interruzione selezionare una riga del punto di interruzione e aprire il menu di scelta rapida. È inoltre possibile impostare alcune condizioni direttamente nella colonna della condizione.

Torna all'inizio Contents

Specificare quando un punto di interruzione viene interrotto dal numero di passaggi, dalla valutazione dell'espressione, dal percorso di esecuzione o dalla modifica dei dati

  • Specify a hit count at which the breakpoint executes • Specify a breakpoint condition using a code expression • Specify the devices, processes, or threads that a breakpoint executes on • Set a data change breakpoint (native C++ only)

Specificare un numero di passaggi dopo il quale viene eseguito il punto di interruzione

Un numero di passaggi tiene traccia del numero di volte in cui viene raggiunto un punto di interruzione. Impostare un valore e una condizione in modo da eseguire il punto di interruzione quando il numero di passaggi equivale al valore, a un multiplo di un valore specificato o è maggiore o uguale al valore. Per specificare numero di passaggi e condizione:

  1. Aprire la finestra di dialogo Passaggi punto di interruzione.

    1. In una finestra di origine, nella finestra Disassembly o nella finestra Stack di chiamate, selezionare una riga contenente un punto di interruzione, scegliere Punti di interruzione, quindi Passaggi nel menu di scelta rapida.

      -oppure-

    2. Nella finestra Punti di interruzione selezionare una riga del punto di interruzione, quindi scegliere Passaggi nel menu di scelta rapida.

      Finestra di dialogo Passaggi punto di interruzione

  2. Selezionare la condizione e immettere il numero di passaggi.

Le condizioni del numero di passaggi sono utili quando si desidera interrompere un ciclo in corrispondenza di un determinato numero di iterazioni. È anche possibile specificare un numero molto elevato se si desidera contare quante volte viene raggiunto un punto di interruzione senza interrompere l'esecuzione.

Il numero di passaggi specificato viene mantenuto solo per la sessione di debug. Al termine della sessione di debug, il numero di passaggi viene reimpostato su zero.

Torna all'inizio Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Torna all'inizio Contents

Specificare una condizione di punto di interruzione tramite un'espressione di codice

Una condizione del punto di interruzione è un'espressione restituita dal debugger quando viene raggiunto un punto di interruzione. Se la condizione viene soddisfatta, il debugger interrompe l'esecuzione.

La condizione può essere una qualsiasi espressione valida riconosciuta dal debugger. In un programma di attività bancarie, ad esempio, è possibile impostare una condizione del punto di interruzione come balance < 0. Per altre informazioni sulle espressioni valide, vedere Espressioni nel debugger.

Per specificare una condizione del punto di interruzione

  1. Aprire il menu di scelta rapida per il punto di interruzione e scegliere Condizione.

  2. Nella finestra di dialogo Condizione punto di interruzione immettere un'espressione valida nella casella Condizione.

  3. Scegliere È true se si desidera interrompere l'esecuzione quando l'espressione viene soddisfatta, oppure scegliere È cambiata se si desidera interrompere l'esecuzione quando il valore dell'espressione è cambiato.

Il debugger non valuta l'espressione finché il punto di interruzione non viene raggiunto per la prima volta. Se si sceglie È cambiata per il codice nativo, la prima valutazione della condizione non viene considerata una modifica dal debugger, pertanto il punto di interruzione non viene raggiunto alla prima valutazione. Se si sceglie È cambiata per il codice gestito, il punto di interruzione viene raggiunto alla prima valutazione dopo la selezione di È cambiata.

Se si imposta una condizione del punto di interruzione con sintassi non valida, viene immediatamente visualizzato un messaggio di avviso. Se viene specificata una condizione del punto di interruzione con sintassi valida ma con semantica non valida, viene visualizzato un messaggio di avviso la prima volta che si raggiunge il punto di interruzione. In entrambi i casi, il debugger interrompe l'esecuzione quando si raggiunge il punto di interruzione non valido. Il punto di interruzione viene ignorato solo se la condizione è valida e restituisce false.

Torna all'inizio Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Torna all'inizio Contents

Specificare i dispositivi, i processi o i thread in cui viene eseguito un punto di interruzione

  1. Aprire il menu di scelta rapida per un punto di interruzione e scegliere Filtro.

    Finestra di dialogo Filtro punto di interruzione

  2. Specificare i criteri di filtro in base alle indicazioni della finestra di dialogo.

Torna all'inizio Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Torna all'inizio Contents

Impostare un punto di interruzione di modifica dei dati (solo C++ nativo)

I punti di interruzione dei dati interrompono l'esecuzione quando viene scritto un valore archiviato in una posizione di memoria specificata. Se il valore viene letto ma non scritto, l'esecuzione non viene interrotta. Per impostare i punti di interruzione dei dati, è necessario che il debugger sia in modalità di interruzione.

  1. Dal menu Debug scegliere Nuovo punto di interruzione e Nuovo punto di interruzione dei dati.

    -oppure-

    Nel menu della finestra Punti di interruzione scegliere Nuovo, Nuovo punto di interruzione dei dati.

    Finestra di dialogo Nuovo punto di interruzione

  2. Nella casella Indirizzo digitare un indirizzo di memoria o un'espressione che restituisca un indirizzo di memoria.

    Ad esempio, digitare &avar per eseguire l'interruzione quando viene modificato il contenuto della variabile avar.

  3. Nella casella Conteggio byte digitare il numero di byte che si desidera controllare tramite il debugger.

    Ad esempio, se si digita 4, il debugger controllerà i quattro byte a partire da &myFunction e si interromperà se viene modificato il valore di uno di questi byte.

Per impostare i punti di interruzione dei dati, è necessario che il debugger sia in modalità di interruzione.

I punti di interruzione dei dati non funzionano nei seguenti casi:

  • Se un processo di cui non viene eseguito il debug scrive nella posizione di memoria.

  • Se la posizione di memoria è condivisa tra due o più processi.

  • Se la posizione di memoria viene aggiornata all'interno del kernel. Ad esempio, se passata alla funzione ReadFile di Windows a 32 bit, la memoria viene aggiornata dalla modalità kernel e il debugger non viene interrotto durante la scrittura nella memoria.

Gli indirizzi di variabili vengono modificati da una sessione di debug a quella successiva. Per questo motivo, i punti di interruzione di dati vengono disabilitati automaticamente alla fine di ogni sessione di debug.

Se un punto di interruzione dei dati viene impostato su una variabile locale, resta attivato anche quando la funzione termina. Tuttavia, poiché l'indirizzo di memoria su cui è impostato non ha più lo stesso significato, i risultati di tale punto di interruzione saranno imprevisti. Se si imposta un punto di interruzione dei dati su una variabile locale, la procedura consigliata consiste nel rimuoverlo o disabilitarlo prima che la funzione termini.

Visual Studio supporta un massimo di quattro punti di interruzione dei dati per soluzione.

Torna all'inizio Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Torna all'inizioContents

Visualizzare nella finestra di output con punti di analisi

I punti di analisi costituiscono un'altra modalità di utilizzo dei punti di interruzione. Un punto di analisi è un punto di interruzione che visualizza un messaggio nella finestra Output. Un punto di analisi può fungere da istruzione di analisi temporanea nel linguaggio di programmazione.

Per visualizzare un messaggio in corrispondenza di un punto di interruzione esistente, aprire il menu di scelta rapida del punto di interruzione e scegliere Quando raggiunto.

Specificare il messaggio da visualizzare nella finestra di dialogo Quando il punto di interruzione viene raggiunto.

Finestra di dialogo Quando il punto di interruzione viene raggiunto

Specificare il messaggio

È possibile includere nel messaggio informazioni a livello di codice utilizzando la sintassi DebuggerDisplayAttribute (vedere DebuggerDisplayAttribute). Di seguito sono riportati alcuni esempi:

  • In function '{$FUNC}', on thread '{$TID}'

  • Used variable: {varName}, function name: {functionName($FUNC)}

È possibile usare qualsiasi parola chiave descritta nella finestra di dialogo Quando il punto di interruzione viene raggiunto. È inoltre possibile usare altre due parole chiave non visualizzate nella finestra di dialogo, ovvero $TICK per inserire il conteggio della CPU e $FILEPOS per inserire la posizione corrente del file.

Specificare il comportamento del punto di analisi

Per interrompere l'esecuzione quando viene raggiunto il punto di analisi, deselezionare la casella di controllo Continua esecuzione. Se l'opzione Continua esecuzione è selezionata, l'esecuzione non viene interrotta. In entrambi i casi, il messaggio viene visualizzato.

Disabilitare il punto di analisi

Per disabilitare temporaneamente il punto di analisi, deselezionare la casella di controllo Stampa un messaggio.

Torna all'inizioContents

Gestire i punti di interruzione nella finestra Punti di interruzione

  • Export and import breakpoints • Label breakpoints

Quasi tutte le funzionalità per impostare, configurare e gestire i punti di interruzione della finestra Punti di interruzione sono disponibili nelle posizioni dei singoli punti di interruzione nelle finestre di origine, nella finestra Stack di chiamate e nella finestra Disassembly. La finestra Punti di interruzione costituisce tuttavia una posizione centrale da cui gestire tutti i punti di interruzione, che può essere particolarmente utile per una soluzione di grandi dimensioni o per uno scenario di debug complesso in cui i punti di interruzione sono cruciali. Se è necessario salvare o condividere lo stato e la posizione di un set di punti di interruzione, è possibile salvare e importare i file dei punti di interruzione unicamente dalla finestra Punti di interruzione.

Torna all'inizio Manage breakpoints in the Breakpoints window

Torna all'inizio Contents

Etichettare i punti di interruzione

Le etichette dei punti di interruzione sono utilizzate solo nella finestra Punti di interruzione per ordinare e filtrare l'elenco dei punti di interruzione. Per aggiungere un'etichetta a un punto di interruzione, scegliere la riga del punto di interruzione, quindi scegliere Etichetta dal menu di scelta rapida.

Risolvere problemi relativi ai punti di interruzione

  • The debugger can't determine the source file for a breakpoint • The debugger can't locate the correct version of the source file for a breakpoint • Breakpoints don't work in a DLL

Il debugger non è in grado di determinare il file di origine di un punto di interruzione

Se due o più file di origine nel progetto hanno lo stesso nome, il debugger potrebbe avere difficoltà nel determinare in quale file è impostato il punto di interruzione. Spesso tale problema si verifica se si crea un modulo con lo stesso nome di un componente della libreria di debug alla quale ci si collega.

Per risolvere il problema, selezionare il punto di interruzione in una finestra di origine e scegliere Percorso dal menu di scelta rapida.

Finestra di dialogo Punto di interruzione del file

Immettere il percorso completo del file corretto nella casella File.

Torna all'inizioTroubleshoot breakpoints

Torna all'inizioContents

Il debugger non è in grado di individuare la versione corretta del file di origine di un punto di interruzione

Se un file di origine è stato modificato e l'origine non corrisponde più al codice di cui si esegue il debug, il debugger potrebbe non essere in grado di individuare il file di origine corrispondente a un punto di interruzione, sebbene tale file esista.

  1. Per visualizzare in Visual Studio il codice sorgente che non corrisponde alla versione sottoposta a debug, scegliere Debug, quindi Opzioni e impostazioni. Nella pagina Debug/Generale deselezionare l'opzione Usa solo codice sorgente che corrisponde esattamente alla versione originale.

  2. È inoltre possibile associare il punto di interruzione al file di origine. Selezionare il punto di interruzione e scegliere Percorso dal menu di scelta rapida. Selezionare Il codice sorgente può essere diverso dalla versione originale nella finestra di dialogo Punto di interruzione del file.

Torna all'inizioTroubleshoot breakpoints

Torna all'inizioContents

I punti di interruzione non funzionano in una DLL

Non è possibile impostare un punto di interruzione in un file di origine se le informazioni di debug per il modulo in cui si trova il codice non sono state caricate dal debugger. Uno dei sintomi è la visualizzazione di messaggi quali Impossibile impostare il punto di interruzione. Nella posizione relativa al punto di interruzione appare un'icona di interruzione di avviso. Tali punti di interruzioni di avviso, tuttavia, si trasformano in punti di interruzione effettivi al caricamento del codice.

Torna all'inizio Troubleshoot breakpoints

Torna all'inizioContents

Riferimento ai glifi dei punti di interruzione

Nelle finestre di origine e nella finestra Disassembly le posizioni dei punti di interruzione sono indicate tramite simboli denominati icone, visualizzati nel margine sinistro. Nella tabella seguente vengono descritte le icone.

Se si posiziona il cursore del mouse sull'icona di un punto di interruzione, viene visualizzata una descrizione contenente ulteriori informazioni, particolarmente utili per i punti di interruzione di avviso e di errore.

Icona

Descrizione

Icona debug 1

Punto di interruzione normale. Un'icona pieno indica che il punto di interruzione è attivato. Un'icona vuota indica che è disabilitato.

Icona debug 2

Punto di interruzione avanzato. Attivo/disabilitato. Il segno + indica che al punto di interruzione è associata almeno una funzionalità avanzata, ad esempio condizione, numero di passaggi o filtro.

Icona debug 3

Punto di interruzione mappato. Attivo/disabilitato. Il punto di interruzione è impostato nel codice ASP/ASP.NET e mappato a un punto di interruzione nella pagina HTML corrispondente, oppure è impostato in un file di script sul lato server e mappato al file di script sul lato client corrispondente.

Icona debug 4

Punto di analisi. Attivo/disabilitato. Il raggiungimento di questo punto comporta l'esecuzione di un'azione specificata, ma non l'interruzione del programma.

Icona debug 5

Punto di analisi avanzato. Attivo/disabilitato. Il segno + indica che al punto di analisi è associata almeno una funzionalità avanzata, ad esempio condizione, numero di passaggi o filtro.

Icona debug 6

Punto di analisi mappato. Attivo/disabilitato. Il punto di analisi è impostato nel codice ASP/ASP.NET e mappato a un punto di analisi nella pagina HTML corrispondente.

Icona debug 7

Errore del punto di analisi o del punto di interruzione. La X indica che il punto di interruzione o di analisi non è stato impostato a causa di una condizione di errore.

Icona debug 8

Avviso del punto di interruzione o del punto di analisi. Il punto esclamativo indica che il punto di interruzione o di analisi non è stato impostato a causa di una condizione temporanea. In genere, ciò significa che il codice in corrispondenza della posizione del punto di interruzione o di analisi non è stato caricato. Il punto esclamativo appare inoltre quando si stabilisce la connessione a un processo e i simboli per tale processo non sono caricati. Al termine del caricamento del codice o dei simboli, il punto di interruzione risulterà attivato e l'icona assumerà un altro aspetto.

Torna all'inizioContents

Vedere anche

Concetti

Avviare, interrompere, eseguire istruzioni, esplorare il codice e arrestare il debug in Visual Studio