Risolvere i problemi relativi ai punti di interruzione nel debugger di Visual Studio

Si applica a: Visual Studio

Avvisi relativi ai punti di interruzione

Durante il debug, un punto di interruzione ha due possibili stati di visualizzazione:

  • Cerchio rosso a tinta unita, se il debugger ha impostato correttamente un punto di interruzione nel processo di destinazione.
  • Cerchio vuoto (pieno di bianco), il punto di interruzione è disabilitato o si è verificato 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 gli avvisi prominenti e come risolverli.

"Nessun simbolo caricato per questo documento"

Passare alla finestra Moduli (Debug>moduliWindows>) durante il debug e verificare se il modulo è caricato.

  • Se il modulo viene caricato, controllare la colonna Stato simboli per verificare se i simboli sono stati caricati.
    • Se i simboli non vengono caricati, controllare lo stato del simbolo per diagnosticare il problema. Nel menu di scelta rapida di un modulo nella finestra Moduli selezionare Informazioni di caricamento simboli per vedere dove il debugger ha cercato di provare a caricare i simboli. Per altre informazioni sul caricamento dei simboli, vedere Specificare simboli (con estensione pdb) e File di origine.
    • Se vengono caricati simboli, il database PDB non contiene informazioni sui file di origine. Alcune possibili cause sono:
      • Se i file di origine sono stati aggiunti di recente, verificare che sia in corso il caricamento di una versione aggiornata del modulo.
      • È possibile creare PDB rimossi usando l'opzione del linker /PDBSTRIPPED . I PDB rimossi non contengono informazioni sui file di origine. Verificare che si stia lavorando con un PDB completo e non con un database PDB rimosso.
      • Il file PDB è parzialmente danneggiato. Eliminare il file ed eseguire una build pulita del modulo per provare a risolvere il problema.
  • Se il modulo non è caricato, controllare quanto segue per trovare la causa:
    • Verificare che si stia eseguendo il debug del processo corretto.
    • Verificare che si stia eseguendo il debug del codice corretto. È possibile scoprire il tipo di codice di cui il debugger è configurato per il debug nella finestra Processi (Debug>di processiWindows>). Ad esempio, se si sta tentando di eseguire il debug del codice C#, verificare che il debugger sia configurato per il tipo e la versione appropriati di .NET (ad esempio, gestito (v4*) rispetto a gestito (v2*/v3*) o gestito (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 sta eseguendo il debug, il debugger non imposterà i 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 ricompilo. 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 ricompila del sistema del progetto. Ricompilare il progetto salvando di nuovo il file di origine o pulendo l'output di compilazione prima della compilazione.

In scenari rari, è possibile eseguire il debug senza avere codice sorgente corrispondente. Il debug senza codice sorgente corrispondente può generare confusione nell'esperienza di debug, 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). All'editor viene aggiunta una finestra di visualizzazione. 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 aOpzioni e impostazioni di debug>. Nella pagina Debug/Generale deselezionare l'opzione Richiedi file di origine che corrispondono esattamente alla versione originale . Assicurarsi di riabilitare questa opzione al termine del debug.

Il punto di interruzione è stato impostato correttamente (nessun avviso), ma non è stato raggiunto

Questa sezione fornisce informazioni per risolvere i problemi quando il debugger non visualizza avvisi. Il punto di interruzione è un cerchio rosso solido durante il debug attivo, ma il punto di interruzione non viene raggiunto.

Di seguito sono riportati alcuni aspetti da verificare:

  1. Se il codice viene eseguito in più processi o più computer, assicurarsi di eseguire il debug del processo o del computer corretto.
  2. 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.
  3. Se si esegue il debug di codice ottimizzato, verificare che la funzione in cui è impostato il punto di interruzione non sia inline in un'altra funzione. Il Debugger.Break test descritto nel controllo precedente può funzionare anche per testare questo problema.
  4. Per connettersi agli scenari di elaborazione, assicurarsi di eseguire il debug del tipo di codice corretto, ad esempio codice script rispetto a .NET Framework rispetto a .NET 5+. Per analizzare, selezionare l'opzione Collega a nella finestra di dialogo Connetti a processo e scegliere Seleziona, se necessario, per modificare il tipo di codice.

È stato eliminato un punto di interruzione, ma si continua a raggiungerlo quando si avvia di nuovo il debug

Se è stato eliminato un punto di interruzione durante il debug, è possibile raggiungere nuovamente il punto di interruzione al successivo avvio del debug. Per interrompere il raggiungimento di questo punto di interruzione, assicurarsi che tutte le istanze del punto di interruzione vengano rimosse dalla finestra Punti di interruzione.