Haltepunkte: Verwenden von Trefferanzahl, Funktionen der Aufrufliste und Bedingungen, um im Visual Studio Debugger jederzeit zu unterbrechen
Legen Sie Haltepunkte für Quellzeilen, Assemblyanweisungen und die Aufruflistenfunktion fest. Geben Sie Bedingungen, Trefferzähler und Ausführungsspeicherort an. Drucken Sie mit Ablaufverfolgungspunkten. Speichern und importieren Sie Haltepunkte.
Inhalt
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
Erstellen von Haltepunkten, an denen die Ausführung unterbrochen wird, wann Sie es möchten
Standardhaltepunkte, die die Debuggerausführung unterbrechen, wenn ein Quelldateispeicherort erreicht wird, ist eines der wichtigsten Debugverfahren in der Toolbox eines Entwicklers. Mit Visual Studio können Sie mehr als nur Standardhaltepunkte erstellen, um eine präzisere Kontrolle zu erhalten, wann und wo ein Haltepunkt ausgeführt wird.
Sie können Laufzeithaltepunkte festlegen, die die Ausführung anhalten, wenn das Programm zu einer Funktion in der Aufrufliste zurückkehrt, und eine lange Reihe von Ausführen bis Rücksprung-Befehlen vermeiden.
Wenn Sie vermuten, dass eine Schleife im Code nach einigen Iterationen ein fehlerhaftes Verhalten aufweist, können Sie einen Haltepunkt festlegen, um die Ausführung nach einer bestimmten Trefferanzahl in der entsprechenden Codezeile zu beenden, anstatt F5 mehrmals zu drücken (Debuggen, Weiter), um die Iterationsebene zu erreichen.
Mithilfe von Codeausdrücken können Sie die genauen Bedingungen angeben, anhand derer ein Haltepunkt die Ausführung unterbricht.
Sie können das Fenster Haltepunkte verwenden, um den Zustand und das Verhalten vieler Haltepunkte zu verwalten. Wenn Sie eine Sequenz von Haltepunkten sorgfältig erstellt haben, um ein gewöhnliches oder besonders komplexes Problem zu diagnostizieren, können Sie diese Haltepunkte speichern oder freigeben, indem Sie die Import- und Exportbefehle im Fenster Haltepunkte verwenden.
Warnung
Wenn Sie Code im gemischten Modus (systemeigen und verwaltet) debuggen, sollten Sie keine Haltepunkte an Systemkomponenten festlegen.Das Festlegen von Haltepunkten für Systemkomponenten beim Debuggen im gemischten Modus kann dazu führen, dass die Ausführung der Common Language Runtime unterbrochen wird und der Debugger nicht mehr reagiert.
Contents
Festlegen eines Haltepunkts in einer Quellzeile, einer Assemblyanweisung oder einer Aufruflistenfunktion
- 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
Festlegen eines Haltepunkts in einer Quellzeile
Im Folgenden sind zwei Methoden angegeben, um einen Standardhaltepunkt in einem Quellcodefenster festzulegen:
Doppelklicken Sie im Bundsteg des Fensters auf die Zeile, an der die Ausführung unterbrechen werden soll.
- oder -
Wählen Sie die Zeile aus, und drücken Sie F9.
Das Haltepunktsymbol wird im Bundsteg angezeigt.
Weitere Informationen zur visuellen Nachverfolgung während der Codeausführung finden Sie unter Zuordnen von Methoden in der Aufrufliste beim Debuggen in Visual Studio.
Set a breakpoint at a source line, assembly instruction, or call stack function
Contents
Festlegen eines Haltepunkts in einer Funktionsrückgabe im Aufruflistenfenster
Sie können die Ausführung bei der Anweisung oder in der Zeile unterbrechen, zu der eine aufrufende Funktion zurückkehrt, indem Sie im Fenster Aufrufliste einen Haltepunkt festlegen. Der Debugger muss sich im Unterbrechungsmodus befinden.
Öffnen Sie das Fenster Aufrufliste (Tastenkombination: Ctrl + Alt + C), und wählen Sie die aufrufende Funktion aus, bei der die Ausführung unterbrochen werden soll.
Wählen Sie im Kontextmenü Haltepunkt, Haltepunkt einfügen aus, oder Sie verwenden einfach die F9-TASTE.
Ein Haltepunktsymbol wird am linken Rand neben dem Namen des Funktionsaufrufs angezeigt.
Beim Öffnen des Fensters Haltepunkte (Tastenkombination: STRG + ALT + B) wird der Haltepunkt als Adresshaltepunkt mit einer Speicheradresse angezeigt, die der nächsten ausführbaren Anweisung der Funktion entspricht. Der Debugger unterbricht die Ausführung an der Anweisung.
Weitere Informationen zur visuellen Nachverfolgung während der Codeausführung finden Sie unter Zuordnen von Methoden in der Aufrufliste beim Debuggen in Visual Studio.
Set a breakpoint at a source line, assembly instruction, or call stack function
Contents
Festlegen eines Haltepunkts in einer Assemblyanweisung im Disassemblyfenster
Um einen Haltepunkt in einer Assemblyanweisung festzulegen, muss sich der Debugger im Unterbrechungsmodus befinden.
Öffnen Sie das Fenster Disassembly (Tastenkombination: Ctrl + Alt + D).
Führen Sie einen der folgenden Schritte aus:
Doppelklicken Sie im Bundsteg des Fensters auf die Zeile, an der die Ausführung unterbrechen werden soll.
- oder -
Wählen Sie die Zeile aus, und drücken Sie F9.
Set a breakpoint at a source line, assembly instruction, or call stack function
Contents
Zugriff auf die erweiterten Funktionen von Haltepunkten
Öffnen Sie in einem Quellcodefenster (das Fenster Aufrufliste oder das Fenster Disassembly) das Kontextmenü für den Haltepunkt, und wählen Sie die Eigenschaft aus. Wählen Sie im Fenster "Haltepunkte" eine Zeile mit Haltepunkten aus, und öffnen Sie das Kontextmenü. Sie können mehrere Bedingungen direkt in der Bedingungsspalte festlegen. |
Contents
Festlegen, wann die Ausführung an einem Haltepunkt nach Trefferanzahl, Ausdrucksauswertung, Ausführungsspeicherort oder Datenänderung unterbrochen wird
- 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)
Festlegen einer Trefferanzahl, bei der der Haltepunkt ausgeführt wird
Eine Trefferanzahl registriert, wie oft ein Haltepunkt erreicht wird. Sie legen einen Wert und eine Bedingung fest, sodass der Haltepunkt ausgeführt wird, wenn die Trefferanzahl den Wert erreicht, einem Vielfachen eines angegebenen Werts entspricht oder größer als bzw. gleich dem Wert ist. So legen Sie die Trefferanzahl und Bedingung fest:
Öffnen Sie das Dialogfeld Trefferanzahl für Haltepunkt.
Wählen Sie im Quellcodefenster (das Disassemblyfenster oder das Aufruflistenfenster) eine Zeile aus, die einen Haltepunkt enthält. Wählen Sie anschließend im Kontextmenü Haltepunkte, Trefferanzahl aus.
- oder -
Wählen Sie im Fenster Haltepunkte eine Zeile mit Haltepunkten aus, und klicken Sie im Kontextmenü auf Trefferanzahl.
Wählen Sie die Bedingung aus, und geben Sie die Trefferanzahl ein.
Trefferanzahlzustände sind hilfreich, wenn Sie die Ausführung in einer Schleife bei Erreichen einer bestimmten Anzahl von Iterationen unterbrechen möchten. Sie können auch eine sehr große Anzahl angeben, wenn Sie zählen möchten, wie oft ein Haltepunkt erreicht wird, Sie die Ausführung jedoch nicht unterbrechen möchten.
Die angegebene Trefferanzahl wird nur für die Debugsitzung beibehalten. Beim Beenden der Debugsitzung wird die Trefferanzahl auf 0 (null) zurückgesetzt.
Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change
Contents
Festlegen einer Haltepunktbedingung mithilfe eines Codeausdrucks
Eine Haltepunktbedingung ist ein Ausdruck, den der Debugger beim Erreichen eines Haltepunkts auswertet. Wenn die Bedingung erfüllt wird, unterbricht der Debugger die Ausführung.
Die Bedingung kann ein beliebiger gültiger Ausdruck sein, der vom Debugger erkannt wird. In einem Bankingprogramm können Sie z. B. eine Haltepunktbedingung wie balance < 0 festlegen. Weitere Informationen zu gültigen Ausdrücken finden Sie unter Ausdrücke im Debugger.
So geben Sie eine Haltepunktbedingung an
Öffnen Sie das Kontextmenü für den Haltepunkt, und wählen Sie Bedingung aus.
Geben Sie im Dialogfeld Bedingung für Haltepunkt im Feld Bedingung einen gültigen Ausdruck ein.
Wählen Sie Ist "True" aus, um die Ausführung zu unterbrechen, wenn der Ausdruck erfüllt ist. Wenn Sie Hat sich geändert auswählen, wird die Ausführung unterbrochen, wenn sich der Wert des Ausdrucks geändert hat.
Der Debugger wertet den Ausdruck so lange nicht aus, bis der Haltepunkt das erste Mal erreicht wird. Wenn Sie Hat sich geändert für systemeigenen Code auswählen, wird die erste Auswertung der Bedingung vom Debugger nicht als Änderung betrachtet. Der Haltepunkt wird also bei der ersten Auswertung nicht erreicht. Wenn Sie Hat sich geändert für verwalteten Code auswählen, wird der Haltepunkt bei der ersten Auswertung nach Auswählen von Hat sich geändert erreicht.
Wenn Sie eine Haltepunktbedingung mit ungültiger Syntax festlegen, wird sofort eine Warnmeldung angezeigt. Wenn Sie eine Haltepunktbedingung mit gültiger Syntax aber ungültiger Semantik angeben, wird beim ersten Erreichen des Haltepunkts eine Warnmeldung angezeigt. In beiden Fällen unterbricht der Debugger die Ausführung beim Erreichen des ungültigen Haltepunkts. Der Haltepunkt wird nur übersprungen, wenn die Bedingung gültig ist und als nicht zutreffend ausgewertet wird.
Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change
Contents
Festlegen der Geräte, Prozesse oder Threads, bei denen ein Haltepunkt ausgeführt wird
Öffnen Sie das Kontextmenü für einen Haltepunkt, und wählen Sie Filter aus.
Geben Sie die Filterkriterien gemäß den Anweisungen im Dialogfeld an.
Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change
Contents
Festlegen eines Haltepunkts für Datenänderungen (nur systemeigener C++-Code)
Datenhaltepunkte unterbrechen die Ausführung, wenn ein Wert geschrieben wird, der an einer angegebenen Speicheradresse gespeichert ist. Die Ausführung wird nicht unterbrochen, wenn der Wert gelesen, jedoch nicht geschrieben wird. Zum Festlegen von Datenhaltepunkten muss sich der Debugger im Unterbrechungsmodus befinden.
Wählen Sie im Menü Debuggen die Option Neuer Haltepunkt, Neuer Datenhaltepunkt aus.
- oder -
Klicken Sie im Menü des Fensters Haltepunkte auf Neu, Neuer Datenhaltepunkt.
Geben Sie im Feld Adresse eine Speicheradresse oder einen Ausdruck ein, der als Speicheradresse ausgewertet wird.
Geben Sie beispielsweise &avar ein, um die Ausführung bei einer Änderung des Inhalts der Variablen avar zu unterbrechen.
Geben Sie im Feld Byteanzahl die Anzahl der Bytes an, die der Debugger überwachen soll.
Wenn beispielsweise 4 eingegeben wird, überwacht der Debugger vier Bytes ab &myFunction und unterbricht, wenn eines dieser Bytes seinen Wert ändert.
Zum Festlegen von Datenhaltepunkten muss sich der Debugger im Unterbrechungsmodus befinden.
Unter folgenden Bedingungen funktionieren Datenhaltepunkte nicht:
Wenn ein Prozess, der nicht debuggt wird, in eine Speicheradresse schreibt.
Wenn die Speicheradresse für zwei oder mehr Prozesse freigegeben wird.
Wenn die Speicheradresse innerhalb des Kernels aktualisiert wird. Wenn beispielsweise der Speicher an die 32-Bit Windows-ReadFile-Funktion übergeben wird, wird der Speicher vom Kernelmodus aktualisiert, und der Debugger unterbricht nicht das Schreiben des Speichers.
Adressen von Variablen ändern sich von einer Debugsitzung zur nächsten. Aus diesem Grund werden Datenhaltepunkte am Ende einer Debugsitzung automatisch deaktiviert.
Wenn ein Datenhaltepunkt auf eine lokale Variable festgelegt ist, bleibt der Datenhaltepunkt auch nach Beendigung der Funktion aktiviert. Die Speicheradresse, auf die er festgelegt wird, hat jedoch nicht mehr die gleiche Bedeutung. Deshalb sind die Ergebnisse eines solchen Haltepunkts unvorhersehbar. Wenn Sie ein Datenhaltepunkt auf eine lokale Variable festlegen, sollten Sie diesen vor dem Ende der Funktion entfernen oder deaktivieren.
Visual Studio unterstützt maximal vier Datenhaltepunkte pro Projektmappe.
Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change
Contents
Ausgabe im Ausgabefenster mit Ablaufverfolgungspunkten
Ablaufverfolgungspunkte sind eine andere Methode, Haltepunkte zu verwenden. Beim Ablaufverfolgungspunkt handelt es sich um einen Haltepunkt, der eine Meldung im Fenster Ausgabe ausgibt. Ein Ablaufverfolgungspunkt kann wie eine temporäre Trace-Anweisung in der Programmiersprache reagieren.
Um eine Meldung an einem vorhandenen Haltepunkt zu drucken, öffnen Sie das Kontextmenü für den Haltepunkt, und wählen Sie Bei Treffer aus.
Sie legen die Meldung fest, die im Dialogfeld Beim Erreichen eines Haltepunktes ausgegeben werden soll.
Festlegen der Meldung
Sie können programmgesteuerte Informationen mithilfe der DebuggerDisplayAttribute-Syntax in die Meldung einfügen (weitere Informationen finden Sie unter DebuggerDisplayAttribute). Im Folgenden sind einige Beispiele angegeben:
In function '{$FUNC}', on thread '{$TID}'
Used variable: {varName}, function name: {functionName($FUNC)}
Sie können jedes der im Dialogfeld Beim Erreichen eines Haltepunktes beschriebenen Schlüsselwörter verwenden. Sie können zusätzlich zwei weitere Schlüsselwörter verwenden, die nicht im Dialogfeld angezeigt werden: $TICK fügt den aktuellen CPU-Tickzähler ein, und $FILEPOS fügt die aktuelle Dateiposition ein.
Festlegen des Verhaltens des Ablaufverfolgungspunkts
Um die Ausführung bei Erreichen des Ablaufverfolgungspunkts zu unterbrechen, deaktivieren Sie das Kontrollkästchen Ausführung fortsetzen. Wenn Ausführung fortsetzen aktiviert ist, wird die Ausführung nicht angehalten. In beiden Fällen wird die Meldung gedruckt.
Deaktivieren des Ablaufverfolgungspunkts
Um den Ablaufverfolgungspunkt vorübergehend zu deaktivieren, deaktivieren Sie das Kontrollkästchen Meldung drucken.
Contents
Verwalten von Haltepunkten im Haltepunktefenster
- Export and import breakpoints • Label breakpoints
Nahezu die gesamten Funktionen zum Festlegen, Konfigurieren und Verwalten von Haltepunkten des Fensters Haltepunkte ist an einzelnen Haltepunktpositionen in den Quellcodefenstern (im Fenster Aufrufliste und im Fenster Disassembly) verfügbar. Im Fenster Haltepunkte ist jedoch ein zentraler Ort zum Verwalten aller Haltepunkte angegeben, die bei großen Projektmappen oder bei komplexen Debugszenarios besonders hilfreich sein können, bei denen Haltepunkte wichtig sind. Wenn Sie den Zustand und den Speicherort eines Satzes Haltepunkte speichern oder freigeben müssen, können Sie Haltepunktdateien nur vom Fenster Haltepunkte aus speichern und importieren.
Manage breakpoints in the Breakpoints window
Contents
Bezeichnen von Haltepunkten
Haltepunktbezeichnungen werden nur im Fenster Haltepunkte verwendet, um die Liste der Haltepunkte zu sortieren und zu filtern. Um eine Bezeichnung einem Haltepunkt hinzuzufügen, wählen Sie die Zeile mit Haltepunkten aus, und klicken Sie dann im Kontextmenü auf Bezeichnung.
Problembehandlung von Haltepunkten
- 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
Der Debugger kann die Quelldatei für einen Haltepunkt nicht ermitteln
Wenn mehrere Quelldateien im Projekt denselben Namen aufweisen, kann der Debugger möglicherweise nur schwer bestimmen, in welcher Datei der Haltepunkt festgelegt ist. Dies ist häufig der Fall, wenn Sie ein Modul erstellen, das den denselben Namen wie die Komponente der Debugbibliothek aufweist, mit der eine Verbindung hergestellt wird.
Um dieses Problem zu beheben, wählen Sie den Haltepunkt in einem Quellcodefenster aus, und klicken Sie im Kontextmenü auf Speicherort.
Geben Sie den vollständigen Pfad zur richtigen Datei im Feld Datei ein.
Troubleshoot breakpoints
Contents
Der Debugger kann die richtige Version der Quelldatei für einen Haltepunkt nicht finden
Wenn eine Quelldatei geändert wurde und deshalb nicht mehr mit dem debuggenden Code übereinstimmt, kann der Debugger die Quelldatei, die einem Haltepunkt entspricht, möglicherweise nicht finden, obwohl diese vorhanden ist.
Wenn Visual Studio Quellcode anzeigen soll, der nicht mit der debuggenden Version übereinstimmt, wählen Sie Debuggen, Optionen und Einstellungen aus. Deaktivieren Sie auf der Seite Debugging/Allgemein die Option für Nur Quellcode verwenden, der genau mit der Originalversion übereinstimmt.
Sie können den Haltepunkt auch an die Quelldatei binden. Wählen Sie den Haltepunkt aus, und klicken Sie im Kontextmenü auf Speicherort. Aktivieren Sie das Kontrollkästchen Unterschiede zwischen Quellcode und Originalversion zulassen im Dialogfeld Dateihaltepunkt.
Troubleshoot breakpoints
Contents
Haltepunkte funktionieren nicht in einer DLL-Datei
In einer Quelldatei kann kein Haltepunkt festgelegt werden, wenn die erforderlichen Debuginformationen für das Modul, in dem sich der Code befindet, nicht vom Debugger geladen wurden. Zu den Symptomen gehören u. a. Meldungen wie Der Haltepunkt kann nicht festgelegt werden. An der Haltepunktposition wird das Haltepunkt-Warnsymbol angezeigt. Sobald der Code geladen wurde, werden die Warnungsmeldungen des Haltepunkts zu tatsächlichen Haltepunkten.
Troubleshoot breakpoints
Contents
Verweis auf Haltepunktglyphen
In den Quellcodefenstern und im Fenster Disassembly sind Haltepunkte durch Symbole, so genannte Glyphen, am linken Rand markiert. In der folgenden Tabelle werden diese Symbole beschrieben.
Wenn Sie die Maus auf ein Haltepunktsymbol halten, wird eine QuickInfo mit weiteren Informationen angezeigt. Diese Informationen sind besonders nützlich bei Fehler- und Warnungshaltepunkten.
Symbol |
Beschreibung |
---|---|
Normaler Haltepunkt. Das ausgefüllte Symbol gibt an, dass der Haltepunkt aktiviert ist. Das hohle Symbol gibt an, dass er deaktiviert ist. |
|
Erweiterter Haltepunkt. Aktiviert/Deaktiviert. Das Pluszeichen (+) zeigt an, dass dem Haltepunkt mindestens eine erweiterte Funktion beigefügt ist (z. B. eine Bedingung, ein Trefferzähler oder ein Filter). |
|
Zugeordneter Haltepunkt. Aktiviert/Deaktiviert. Der Haltepunkt wird in ASP/ASP.NET-Code festgelegt und einem Haltepunkt in der entsprechenden HTML-Seite zugeordnet bzw. in einer serverseitigen Skriptdatei festgelegt und der entsprechenden Skriptdatei auf Clientseite zugeordnet. |
|
Ablaufverfolgungspunkt. Aktiviert/Deaktiviert. Trifft der Debugger auf diesen Punkt, wird das Programm nicht unterbrochen, sondern eine angegebene Aktion ausgeführt. |
|
Erweiterter Ablaufverfolgungspunkt. Aktiviert/Deaktiviert. Das Pluszeichen (+) zeigt an, dass dem Ablaufverfolgungspunkt mindestens eine erweiterte Funktion beigefügt ist (z. B. eine Bedingung, ein Trefferzähler oder ein Filter). |
|
Zugeordneter Ablaufverfolgungspunkt. Aktiviert/Deaktiviert. Der Ablaufverfolgungspunkt wird im ASP/ASP.NET-Code festgelegt und einem Ablaufverfolgungspunkt in der entsprechenden HTML-Seite zugeordnet. |
|
Fehler bei Haltepunkt oder Ablaufverfolgungspunkt. Das X zeigt an, dass der Haltepunkt oder der Ablaufverfolgungspunkt aufgrund eines Fehlerzustands nicht festgelegt werden konnte. |
|
Warnung bei Haltepunkt oder Ablaufverfolgungspunkt. Das Ausrufungszeichen zeigt an, dass ein Haltepunkt oder ein Ablaufverfolgungspunkt aufgrund einer temporären Fehlerbedingung nicht festgelegt werden konnte. Dies bedeutet normalerweise, dass der Code am Ort des Haltepunkts bzw. des Ablaufverfolgungspunkts nicht geladen wurde. Die Warnung kann auch beim Anfügen an einen Prozess angezeigt werden, wenn die Symbole für den entsprechenden Prozess nicht geladen werden. Wenn der Code oder die Symbole geladen werden, wird der Haltepunkt aktiviert, und das Symbol ändert sich. |
Contents