Risolvere i problemi relativi ai punti di interruzione nel debugger di Visual Studio
Si applica a: Visual Studio
Avvisi del punto di interruzione
Durante il debug, un punto di interruzione ha due possibili stati di visualizzazione:
- Cerchio rosso a tinta unita, se il debugger imposta correttamente un punto di interruzione nel processo di destinazione.
- Cerchio vuoto (grigio scuro o bianco pieno, a seconda del tema), se il punto di interruzione è disabilitato o si verifica un avviso quando si tenta di impostare il punto di interruzione.
Per determinare la differenza, passare il puntatore del mouse sul punto di interruzione e verificare se è presente un avviso. Le due sezioni seguenti descrivono avvisi prominenti e come risolverli.
"Nessun simbolo è stato caricato per questo documento"
Passare a Debug>di moduli Windows>durante il debug e verificare se il modulo è caricato.
- Se il modulo viene caricato, controllare la colonna Stato simbolo per verificare se i simboli sono stati caricati.
Se i simboli non vengono caricati, controllare lo stato del simbolo per diagnosticare il problema:
Nella finestra Moduli fare clic con il pulsante destro del mouse sul modulo per cui i simboli non sono stati caricati e selezionare Informazioni di caricamento simboli....
Per altre informazioni sul caricamento dei simboli, vedere Specificare i simboli (con estensione pdb) e i file di origine.
Se i simboli vengono caricati, il PDB non contiene informazioni sui file di origine. Alcune possibili cause sono:
- Se i file di origine sono stati aggiunti di recente, verificare che venga caricata una versione aggiornata del modulo.
- È possibile creare PDB rimossi usando l'opzione /PDBSTRIPPED linker. I FILE PDF rimossi non contengono informazioni sui file di origine. Verificare di usare un PDB completo e non un PDB rimosso.
- Il file PDB è parzialmente danneggiato. Eliminare il file ed eseguire una compilazione pulita del modulo per provare a risolvere il problema.
- Se il modulo non viene caricato, verificare quanto segue per trovare la causa:
- Verificare di eseguire il debug del processo corretto.
- Verificare che si stia eseguendo il debug del codice corretto. È possibile scoprire il tipo di codice configurato dal debugger per il debug nella finestra Processi (Debug>processi Windows).> Ad esempio, se si sta provando a eseguire il debug di codice C#, verificare che il debugger sia configurato per il tipo e la versione appropriati di .NET (ad esempio, Managed (v4*) e Managed (v2*/v3*) e Managed (CoreCLR)).
"… il codice sorgente corrente è diverso dalla versione incorporata in ..."
Se un file di origine è stato modificato e l'origine non corrisponde più al codice di cui si esegue il debug, il debugger non imposta punti di interruzione nel codice per impostazione predefinita. In genere, questo problema si verifica quando viene modificato un file di origine, ma il codice sorgente non è stato ricompilato. Per risolvere questo problema, ricompilare il progetto. Se il sistema di compilazione ritiene che il progetto sia già aggiornato anche se non lo è, è possibile forzare la ricompilazione del sistema di progetto. Ricompilare il progetto salvando di nuovo il file di origine o pulendo l'output della compilazione prima della compilazione.
In rari scenari, è possibile eseguire il debug senza che sia presente codice sorgente corrispondente. Il debug senza codice sorgente corrispondente può causare un'esperienza di debug confusa, quindi assicurarsi di continuare.
Seguire una delle opzioni per disabilitare questi controlli di sicurezza:
- Per modificare un singolo punto di interruzione, passare il puntatore del mouse sull'icona del punto di interruzione nell'editor e selezionare l'icona delle impostazioni (ingranaggio). Viene aggiunta una finestra di visualizzazione all'editor. Nella parte superiore della finestra di visualizzazione è presente un collegamento ipertestuale che indica la posizione del punto di interruzione. Selezionare il collegamento ipertestuale per consentire la modifica del percorso del punto di interruzione e selezionare Consenti che il codice sorgente sia diverso dall'originale.
- Per modificare questa impostazione per tutti i punti di interruzione, passare a Opzioni di debug>e impostazioni. Nella pagina Debug/Generale deselezionare l'opzione Richiedi corrispondenza esatta dei file di origine con la versione originale . Assicurarsi di riabilitare questa opzione al termine del debug.
Il punto di interruzione è stato impostato correttamente (nessun avviso), ma non è stato raggiunto
In questa sezione vengono fornite informazioni per la risoluzione dei problemi quando il debugger non visualizza avvisi: il punto di interruzione è un cerchio rosso continuo durante il debug attivo, ma il punto di interruzione non viene raggiunto.
Ecco alcuni aspetti da controllare:
- Se il codice viene eseguito in più di un processo o più computer, assicurarsi di eseguire il debug del processo o del computer corretto.
- Verificare che il codice sia in esecuzione. Per verificare che il codice sia in esecuzione, aggiungere una chiamata a
System.Diagnostics.Debugger.Break
(C#/VB) o__debugbreak
(C++) alla riga di codice in cui si sta tentando di impostare il punto di interruzione e quindi ricompilare il progetto. - Se si esegue il debug di codice ottimizzato, assicurarsi che la funzione in cui è impostato il punto di interruzione non venga inserita in un'altra funzione. Il
Debugger.Break
test descritto nel controllo precedente può funzionare anche per testare questo problema. - Per connettersi agli scenari di processo , assicurarsi di eseguire il debug del tipo di codice corretto, ad esempio codice di script rispetto a .NET Framework e .NET 5+. Per esaminare, selezionare l'opzione Connetti a nella finestra di dialogo Connetti a processo e scegliere Seleziona, se necessario, per modificare il tipo di codice.
Un punto di interruzione è stato eliminato ma si continua a raggiungerlo quando si avvia nuovamente il debug
Se è stato eliminato un punto di interruzione durante il debug, è possibile che il punto di interruzione venga raggiunto di nuovo alla successiva avvio del debug. Per evitare di raggiungere il punto di interruzione, accertarsi che tutte le istanze del punto di interruzione vengano rimosse dalla finestra Punti di interruzione .