Steuern des Ziels
Während Sie eine Zielanwendung im Benutzermodus oder einen Zielcomputer im Kernelmodus debuggen, kann das Ziel ausgeführt oder beendet werden.
Wenn der Debugger eine Verbindung mit einem Kernelmodusziel herstellt, lässt der Debugger das Ziel ausgeführt, es sei denn, Sie verwenden die Befehlszeilenoption-b, das Zielsystem reagiert nicht mehr (d. h. abgestürzt), oder das Zielsystem wird aufgrund einer früheren Kerneldebugaktion weiterhin angehalten.
Wenn der Debugger ein Benutzermodusziel startet oder eine Verbindung mit diesem herstellt, beendet der Debugger das Ziel sofort, es sei denn, Sie verwenden die Befehlszeilenoption -g . Weitere Informationen finden Sie unter Anfänglicher Haltepunkt.
Wenn das Ziel ausgeführt wird
Wenn das Ziel ausgeführt wird, sind die meisten Debuggeraktionen nicht verfügbar.
Wenn Sie ein ausgeführtes Ziel beenden möchten, können Sie den Befehl Break ausgeben. Dieser Befehl bewirkt, dass der Debugger in das Ziel einbricht. Das heißt, der Debugger beendet das Ziel, und das gesamte Steuerelement wird an den Debugger übergeben. Möglicherweise wird die Anwendung nicht sofort unterbrochen. Wenn beispielsweise alle Threads derzeit Systemcode ausführen oder sich in einem Wartevorgang befinden, wird die Anwendung erst unterbrochen, nachdem das Steuerelement an den Code der Anwendung zurückgegeben wurde.
Wenn für ein ausgeführtes Ziel eine Ausnahme auftritt, bestimmte Ereignisse auftreten, ein Haltepunkt erreicht wird oder die Anwendung normal geschlossen wird, wird das Ziel in den Debugger eingebrochen. Diese Aktion beendet das Ziel und gibt dem Debugger die gesamte Kontrolle. Im Fenster Debuggerbefehl wird eine Meldung angezeigt, die den Fehler, das Ereignis oder den Haltepunkt beschreibt.
Wenn das Ziel angehalten wird
Um die Ausführung des Ziels zu starten oder zu steuern, können Sie die folgenden Schritte ausführen:
Um die Ausführung der Anwendung zu veranlassen, geben Sie den Befehl Go aus.
Wenn Sie die Anwendung jeweils einzeln durchlaufen möchten, verwenden Sie die Befehle "Step Into" oder "Step Over ". Wenn ein Funktionsaufruf auftritt, tritt Step Into in die Funktion ein und führt die einzelnen Anweisungen weiter durch. Step Over behandelt den Funktionsaufruf als einzelnen Schritt. Wenn sich der Debugger im Assemblymodus befindet, erfolgt das Schrittschritten jeweils eine Computeranweisung. Wenn sich der Debugger im Quellmodus befindet, erfolgt das Schrittschritten jeweils eine Quellzeile.
Um die aktuelle Funktion zu beenden und zu beenden, wenn die Rückgabe erfolgt, verwenden Sie die Befehle Ausrücken oder Nachverfolgen und Überwachen . Der Befehl Step Out wird fortgesetzt, bis die aktuelle Funktion endet. Ablaufverfolgung und Überwachung werden fortgesetzt, bis die aktuelle Funktion endet, und zeigt auch eine Zusammenfassung der Aufrufe der Funktion an. Sie müssen jedoch den Befehl Ablaufverfolgung und Überwachung für die erste Anweisung der betreffenden Funktion ausgeben.
Wenn eine Ausnahme auftritt, können Sie die Befehle Go with Exception Handled und Go with Exception Not Handled verwenden, um die Ausführung fortzusetzen und die status der Ausnahme zu steuern. (Weitere Informationen zu Ausnahmen finden Sie unter Steuern von Ausnahmen und Ereignissen.)
(Nur WinDbg) Wenn Sie im Fenster Disassembly oder Source eine Zeile auswählen und dann den Befehl Ausführen für Cursor verwenden, wird das Programm ausgeführt, bis es auf die ausgewählte Zeile stößt.
(Nur Benutzermodus) Verwenden Sie den Befehl Neustart , um die Zielanwendung zu schließen und sie von Anfang an neu zu starten. Sie können diesen Befehl nur mit einem Prozess verwenden, den der Debugger erstellt hat. Nachdem der Prozess neu gestartet wurde, wird er sofort in den Debugger eingegliedert.
(Nur WinDbg) Um die Zielanwendung zu schließen und den Debugger zu löschen, verwenden Sie den Befehl Debuggen beenden . Mit diesem Befehl können Sie mit dem Debuggen eines anderen Ziels beginnen.
Befehlsformulare
Die meisten Befehle zum Starten oder Steuern der Ausführung des Ziels sind als Textbefehle, Menübefehle, Symbolleistenschaltflächen und Tastenkombinationen vorhanden. Als einfache Textbefehle können Sie diese Befehle in CDB, KD oder WinDbg verwenden. (Die Textform der Befehle unterstützt häufig zusätzliche Optionen, z. B. das Ändern des Speicherorts des Programmzählers oder das Ausführen einer festen Anzahl von Anweisungen.) Sie können die Menübefehle, Symbolleistenschaltflächen und Tastenkombinationen in WinDbg verwenden.
Sie können die Befehle in den folgenden Formularen verwenden.
Get-Help | WinDbg-Befehl | WinDbg-Tastenkombinationen | Wirkung |
---|---|---|---|
Debuggen | Zum Cursor ausführen |
F7 STRG + F10 |
(Nur WinDbg) Wird ausgeführt, bis sie die Linie erreicht, die der Cursor markiert. |
|
Debuggen | Debuggen beenden |
UMSCHALT+F5 |
Beendet das gesamte Debuggen und schließt das Ziel. |
|
(nur CDB/KD) STRG+C |
Debuggen | Brechen |
STRG + UMBRUCH |
Die Ausführung wird beendet, und der Debugger bricht in das Ziel ein. |
Debuggen | Neu starten |
STRG + UMSCHALT + F5 |
(Nur Benutzermodus) Startet die Zielanwendung neu. |
|
Debuggen | Gehen |
F5 |
Das Ziel wird frei ausgeführt. |
|
Setzt die Ausführung nach einem bedingten Haltepunkt fort. |
|||
Debuggen | Behandelte Ausnahme |
Identisch mit g (Go), mit der Ausnahme, dass die aktuelle Ausnahme als behandelt wird. |
||
Debuggen | Nicht behandelte Ausnahme |
Identisch mit g (Go), mit dem Unterschied, dass die aktuelle Ausnahme als unbehandelt behandelt wird. |
||
Debuggen | Step Out |
UMSCHALT +F11 |
Das Ziel wird ausgeführt, bis die aktuelle Funktion abgeschlossen ist. |
|
Debuggen | Schritt über |
F10 |
Das Ziel führt eine Anweisung aus. Wenn es sich bei dieser Anweisung um einen Funktionsaufruf handelt, wird diese Funktion als einzelner Schritt ausgeführt. |
|
Das Ziel wird so lange ausgeführt, bis es die angegebene Adresse erreicht. Alle Schritte in dieser Funktion werden angezeigt (schritte in aufgerufenen Funktionen sind es jedoch nicht). |
|||
Das Ziel wird bis zum nächsten Aufruf ausgeführt. Wenn es sich bei der aktuellen Anweisung um eine Aufrufanweisung handelt, wird dieser Aufruf vollständig ausgeführt und die Ausführung wird bis zum nächsten Aufruf fortgesetzt. |
|||
Das Ziel wird so lange ausgeführt, bis es eine Aufrufanweisung oder eine Rückgabeanweisung erreicht. |
|||
Das Ziel wird so lange ausgeführt, bis es jede Art von Verzweigungsanweisung erreicht, einschließlich bedingter oder bedingungsloser Verzweigungen, Aufrufe, Rückgaben und Systemaufrufe. |
|||
Das Ziel wird so lange ausgeführt, bis es eine Rückgabeanweisung erreicht. |
|||
Debuggen | Schritt in |
F11 F8 |
Das Ziel führt eine Anweisung aus. Wenn es sich bei dieser Anweisung um einen Funktionsaufruf handelt, führt der Debugger die Ablaufverfolgung in diesen Aufruf durch. |
|
Das Ziel wird so lange ausgeführt, bis es die angegebene Adresse erreicht. Alle Schritte in dieser Funktion und aufgerufene Funktionen werden angezeigt. |
|||
(Alle Modi mit Ausnahme des Kernelmodus, nur auf x86-basierten Systemen) Das Ziel wird so lange ausgeführt, bis es die nächste Branch-Anweisung erreicht. |
|||
Das Ziel wird bis zum nächsten Aufruf ausgeführt. Wenn es sich bei der aktuellen Anweisung um eine Aufrufanweisung handelt, wird die -Anweisung in nachverfolgt, bis ein neuer Aufruf erreicht wird. |
|||
Das Ziel wird ausgeführt, bis es eine Aufruf - oder Rückgabeanweisung erreicht. Wenn es sich bei der aktuellen Anweisung um eine Aufrufanweisung oder eine Rückgabeanweisung handelt, wird die Anweisung in nachverfolgt, bis ein neuer Aufruf oder eine neue Rückgabe erreicht ist. |
|||
Das Ziel wird so lange ausgeführt, bis es jede Art von Verzweigungsanweisung erreicht, einschließlich bedingter oder bedingungsloser Verzweigungen, Aufrufe, Rückgaben und Systemaufrufe. Wenn es sich bei der aktuellen Anweisung um eine Verzweigungsanweisung handelt, wird die Anweisung bis zum Erreichen einer neuen Verzweigungsanweisung nachverfolgt. |
|||
Das Ziel wird so lange ausgeführt, bis es eine Rückgabeanweisung erreicht. Wenn es sich bei der aktuellen Anweisung um eine Rückgabeanweisung handelt, wird die Anweisung bis zum Erreichen einer neuen Rückgabe nachverfolgt. |
|||
Das Ziel wird bis zum Abschluss der gesamten angegebenen Funktion ausgeführt. Anschließend werden Statistiken angezeigt. |
Weitere Informationen zum Neustarten des Zielcomputers finden Sie unter Absturz und Neustart des Zielcomputers.
Befehlszeilenoptionen
Wenn die Anwendung beim Starten oder Laden nicht sofort beendet werden soll, verwenden Sie CDB oder WinDbg zusammen mit der Befehlszeilenoption -g . Weitere Informationen zu dieser Situation finden Sie unter Anfänglicher Haltepunkt.
CDB und WinDbg unterstützen auch die Befehlszeilenoption-G. Diese Option bewirkt, dass die Debugsitzung beendet wird, wenn die Anwendung ordnungsgemäß abgeschlossen wird.
Der folgende Befehl versucht, die Anwendung von Anfang bis Ende auszuführen, und die Debuggeraufforderung wird nur angezeigt, wenn ein Fehler auftritt.
cdb -g -G ApplicationName
Sie können die Befehlszeilenoption-pt verwenden, um das Breaktimeout festzulegen. Es gibt bestimmte Probleme, die dazu führen können, dass das Ziel nicht mit dem Debugger kommunizieren kann. Wenn ein Umbruchbefehl ausgegeben wird und der Debugger nach diesem Zeitpunkt nicht mehr in das Ziel einbrechen kann, zeigt der Debugger die Meldung "Timeout für Einbruch" an.
An diesem Punkt beendet der Debugger den Versuch, in das Ziel einzubrechen. Stattdessen hält der Debugger das Ziel an und ermöglicht Es Ihnen, die Zielanwendung zu untersuchen (aber nicht zu steuern).
Das Standardtimeout beträgt 30 Sekunden.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für