Troubleshooting von Haltepunkten im Visual Studio-Debugger
Gilt für: Visual Studio
Haltepunktwarnungen
Beim Debuggen verfügt ein Haltepunkt über zwei mögliche visuelle Zustände:
- Ein durchgezogener roter Kreis, wenn der Debugger erfolgreich einen Haltepunkt im Zielprozess festgelegt hat.
- Ein hohler Kreis (dunkelgrau oder weiß gefüllt, je nach Design), wenn der Haltepunkt deaktiviert ist oder beim Versuch, den Haltepunkt festzulegen, eine Warnung auftritt.
Zeigen Sie auf den Haltepunkt, und prüfen Sie, ob eine Warnung vorliegt, um herauszufinden, welcher der beiden Fälle vorliegt. In den folgenden beiden Abschnitten werden wichtige Warnungen und die entsprechende Problembehandlung beschrieben.
„No Symbols have been loaded for this document“ (Für dieses Dokument wurden keine Symbole geladen)
Navigieren Sie zum Debuggen>von Windows-Modulen> beim Debuggen, und überprüfen Sie, ob Das Modul geladen ist.
- Wenn das Modul geladen ist, überprüfen Sie in der Spalte Symbolstatus, ob Symbole geladen wurden.
Wenn Symbole nicht geladen werden, überprüfen Sie den Symbolstatus, um das Problem zu diagnostizieren:
Klicken Sie im Fenster "Module" mit der rechten Maustaste auf das Modul, für das symbole nicht geladen wurden, und wählen Sie "Symbol Ladeninformationen" aus.
Weitere Informationen zum Laden von Symbolen finden Sie unter Angeben von Symboldateien (.pdb) und Quelldateien im Visual Studio-Debugger (C#, C++, Visual Basic F#).
Wenn Symbole geladen wurden, enthält die PDB-Datei keine Informationen zu Ihren Quelldateien. Einige mögliche Ursachen sind:
- Wenn Ihre Quelldateien erst vor Kurzem hinzugefügt wurden, sollten Sie sich vergewissern, dass eine aktuelle Version des Moduls geladen wird.
- Es ist möglich, mit der Linkeroption /PDBSTRIPPED bereinigte PDB-Dateien zu erstellen. Bereinigte PDB-Dateien enthalten keine Quelldateiinformationen. Vergewissern Sie sich, dass Sie mit einer vollständigen, nicht mit einer bereinigten PDB-Datei arbeiten.
- Die PDB-Datei ist teilweise beschädigt. Löschen Sie die Datei, und führen Sie einen bereinigen Build des Moduls aus, um das Problem zu beheben.
- Wenn Ihr Modul nicht geladen ist, überprüfen Sie Folgendes, um die Ursache zu finden:
- Vergewissern Sie sich, dass Sie den richtigen Prozess debuggen.
- Überprüfen Sie, ob Sie den richtigen Code debuggen. Im Fenster Prozesse (Debuggen>Fenster>Prozesse) können Sie herausfinden, für welche Art von Code der Debugger konfiguriert wurde. Wenn Sie z. B. versuchen, C#-Code zu debuggen, sollten Sie sich vergewissern, dass der Debugger für den entsprechenden Typ und die entsprechende .NET-Version konfiguriert ist (z. B. für verwalteten v4*-, verwalteten v2*/v3*- oder verwalteten CoreCLR-Code).
"… Der aktuelle Quellcode weicht jedoch von der in (…) erstellten Version ab."
Wenn eine Quelldatei geändert wurde und die Quelle nicht mehr mit dem Code übereinstimmt, den Sie debuggen, legt der Debugger standardmäßig keine Haltepunkte im Code fest. Normalerweise tritt dieses Problem auf, wenn eine Quelldatei geändert wurde, ohne den Quellcode neu zu erstellen. Sie müssen das Projekt neu erstellen, um dieses Problem zu beheben. Wenn das Buildsystem davon ausgeht, dass das Projekt bereits auf dem neuesten Stand ist, auch wenn dies nicht der Fall ist, können Sie erzwingen, dass das Projektsystem neu erstellt wird. Dazu müssen Sie die Quelldatei noch einmal speichern oder die Buildausgabe des Projekts vor dem Erstellen bereinigen.
In seltenen Szenarios müssen Sie unter Umständen bei nicht übereinstimmendem Quellcode debuggen. Dies kann jedoch zu verwirrendem Debuggingverhalten führen. Daher sollten Sie sich sicher sein, wie Sie fortfahren möchten.
Verwenden Sie eine der Optionen, um diese Sicherheitsüberprüfungen zu deaktivieren:
- Zum Bearbeiten eines einzelnen Haltepunkts müssen Sie im Editor auf das Symbol des Haltepunkts zeigen und auf das Einstellungssymbol (Zahnrad) klicken. Daraufhin wird dem Editor ein Peek-Fenster hinzugefügt. Oben im Peek-Fenster ist ein Link aufgeführt, der die Position des Haltepunkts angibt. Klicken Sie auf den Link, um die Änderung an der Position des Haltepunkts zuzulassen, und aktivieren Sie das Kontrollkästchen Der Quellcode darf sich vom Original unterscheiden.
- Wenn Sie diese Einstellung für alle Haltepunkte bearbeiten möchten, navigieren Sie zu Debuggen>Optionen und Einstellungen. Deaktivieren Sie auf der Seite Debugging/Allgemein das Kontrollkästchen Quelldateien müssen exakt mit der Originalversion übereinstimmen . Achten Sie darauf, diese Option noch mal zu aktivieren, wenn das Debugging abgeschlossen ist.
Der Haltepunkt wurde erfolgreich festgelegt (keine Warnung), jedoch nicht erreicht
In diesem Abschnitt erfahren Sie, wie Sie das Problem beheben, dass der Debugger keine Warnungen anzeigt: Der Haltepunkt wird als gefüllter roter Kreis angezeigt, wenn der Debugger aktiv ausgeführt wird, und dennoch wird der Haltepunkt nicht erreicht.
Sie können bspw. Folgendes überprüfen:
- Wenn Ihr Code in mehreren Prozessen oder auf mehreren Computern ausgeführt wird, müssen Sie sicherstellen, dass Sie auch den richtigen Prozess oder Computer debuggen.
- Überprüfen Sie, ob Ihr Code ausgeführt wird. Fügen Sie dazu in der Codezeile, in die Sie den Haltepunkt platzieren möchten, einen Aufruf von
System.Diagnostics.Debugger.Break
(C#/VB) oder__debugbreak
(C++) hinzu, und erstellen Sie Ihr Projekt anschließend neu. - Wenn Sie optimierten Code debuggen, müssen Sie sicherstellen, dass die Funktion, die Ihren Haltepunkt enthält, keine Inlinefunktion ist. Der Test mit
Debugger.Break
, der zuvor beschrieben wurde, kann auch für diese Überprüfung herangezogen werden. - Stellen Sie zum Anfügen an Prozessszenarien sicher, dass Sie den richtigen Codetyp debuggen (z. B. Skriptcode im Vergleich zu .NET Framework und .NET 5+). Aktivieren Sie zur Untersuchung die Option Anfügen an im Dialogfeld „An Prozess anfügen“, und wählen Sie ggf. Auswählen aus, um den Codetyp zu ändern.
Ich habe einen Haltepunkt gelöscht, aber erreiche ihn beim erneuten Debuggen weiterhin
Wenn Sie einen Haltepunkt während des Debuggens gelöscht haben, kann der Haltepunkt beim nächsten Debuggen dennoch wieder erreicht werden. Zum Beenden des Erreichens dieses Haltepunkt müssen Sie sicherstellen, dass alle Instanzen des Haltepunkts aus dem Fenster Haltepunkte entfernt wurden.