Steuern des Ziels
Während Sie eine Zielanwendung im Benutzermodus oder einem Zielcomputer im Kernelmodus debuggen, kann das Ziel ausgeführt oder beendet werden.
Wenn der Debugger eine Verbindung mit einem Kernelmodusziel herstellt, verlässt der Debugger das Ausgeführte Ziel, 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 Kerneldebuggingaktion noch beendet.
Wenn der Debugger startet oder eine Verbindung mit einem Benutzermodusziel herstellt, stoppt 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 laufendes Ziel beenden möchten, können Sie einen Break-Befehl ausgeben. Mit diesem Befehl wird der Debugger in das Ziel unterteilt. Das heißt, der Debugger stoppt das Ziel, und alle Steuerelemente werden dem Debugger übergeben. Die Anwendung wird möglicherweise nicht sofort abgebrochen. 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 bei einem ausgeführten Ziel eine Ausnahme auftritt, wenn bestimmte Ereignisse auftreten, wenn ein Haltepunkt erreicht wird oder die Anwendung normal geschlossen wird, wechselt das Ziel in den Debugger. Diese Aktion stoppt das Ziel und gibt dem Debugger alle Kontrolle. Eine Meldung wird im Fenster "Debuggerbefehl " angezeigt und beschreibt den Fehler, das Ereignis oder den Haltepunkt.
Wenn das Ziel beendet wird
Um die Ausführung des Ziels zu starten oder zu steuern, können Sie die folgenden Aktionen ausführen:
Um die Ausführung der Anwendung zu verursachen, geben Sie den Befehl "Gehe zu" aus.
Wenn Sie die Anwendung einzeln durchlaufen möchten, verwenden Sie die Befehle "Schritt in " oder "Schritt-Über ". Wenn ein Funktionsaufruf auftritt, wechselt Step Into in die Funktion und führt die einzelnen Anweisungen weiter durch. Step Over behandelt den Funktionsaufruf als einzelner Schritt. Wenn sich der Debugger im Assemblymodus befindet, tritt schrittweise eine Computeranweisung auf. Wenn sich der Debugger im Quellmodus befindet, tritt schrittweise eine Quellzeile auf.
Um die aktuelle Funktion abzuschließen und zu beenden, wenn die Rückgabe auftritt, verwenden Sie die Befehle "Ausrücken" oder "Ablaufverfolgung" und "Überwachung" . Der Befehl "Aussteigen " wird fortgesetzt, bis die aktuelle Funktion endet. Die Ablaufverfolgung und überwachung wird fortgesetzt, bis die aktuelle Funktion endet, und zeigt außerdem 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 "Gehe mit Ausnahme behandelt " und "Mit Ausnahme nicht behandelt " verwenden, um die Ausführung fortzusetzen und den Status der Ausnahme zu steuern. (Weitere Informationen zu Ausnahmen finden Sie unter Steuern von Ausnahmen und Ereignissen.)
(Nur WinDbg) Wenn Sie eine Zeile im Fenster "Zerlegen" oder in einem Quellfenster auswählen und dann den Befehl "Ausführen zum Cursor" verwenden, wird das Programm ausgeführt, bis die ausgewählte Zeile auftritt.
(Nur Benutzermodus) Verwenden Sie den Befehl "Neu starten", 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 umgebrochen.
(Nur WinDbg) Verwenden Sie den Befehl "Debuggen beenden", um die Zielanwendung zu schließen und den Debugger zu löschen. 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 der Position 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 | Effekt |
---|---|---|---|
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 wechselt in das Ziel. |
Debuggen | Neustarten |
STRG+UMSCHALT+F5 |
(Nur Benutzermodus) Startet die Zielanwendung neu. |
|
Debuggen | Los |
F5 |
Ziel wird frei ausgeführt. |
|
Setzt die Ausführung nach einem bedingten Haltepunkt fort. |
|||
Debuggen | Behandelte Ausnahme |
Identisch mit g (Go),außer dass die aktuelle Ausnahme als behandelt behandelt wird. |
||
Debuggen | Unbehandelte Ausnahme |
Identisch mit g (Go), außer dass die aktuelle Ausnahme als unbehandelt behandelt wird. |
||
Debuggen | Ausschreiten |
UMSCHALT+F11 |
Das Ziel wird ausgeführt, bis die aktuelle Funktion abgeschlossen ist. |
|
Debuggen | Schritt-über |
F10 |
Ziel führt eine Anweisung aus. Wenn diese Anweisung ein Funktionsaufruf ist, wird diese Funktion als einzelner Schritt ausgeführt. |
|
Das Ziel wird ausgeführt, bis es die angegebene Adresse erreicht. Alle Schritte in dieser Funktion werden angezeigt (schritte in aufgerufenen Funktionen sind jedoch nicht). |
|||
Das Ziel wird bis zur nächsten Aufrufanweisung ausgeführt. Wenn es sich bei der aktuellen Anweisung um eine Anrufanweisung handelt, wird dieser Aufruf vollständig ausgeführt, und die Ausführung wird bis zum nächsten Aufruf fortgesetzt. |
|||
Das Ziel wird ausgeführt, bis er eine Aufrufanweisung oder eine Rückgabeanweisung erreicht. |
|||
Das Ziel wird ausgeführt, bis eine Art verzweigte Anweisung erreicht wird, einschließlich bedingter oder bedingungsloser Verzweigungen, Aufrufe, Rückgaben und Systemaufrufen. |
|||
Das Ziel wird ausgeführt, bis es eine Rückgabeanweisung erreicht. |
|||
Debuggen | Schritt in |
F11 F8 |
Ziel führt eine Anweisung aus. Wenn es sich bei dieser Anweisung um einen Funktionsaufruf handelt, werden Debuggerablaufverfolgungen in diesen Aufruf ausgeführt. |
|
Das Ziel wird ausgeführt, bis es die angegebene Adresse erreicht. Alle Schritte in dieser Funktion und die aufgerufenen Funktionen werden angezeigt. |
|||
(Alle Modi, mit Ausnahme des Kernelmodus, nur auf x86-basierten Systemen) Das Ziel wird ausgeführt, bis die nächste Verzweigungsanweisung erreicht wird. |
|||
Das Ziel wird bis zur nächsten Aufrufanweisung ausgeführt. Wenn es sich bei der aktuellen Anweisung um eine Anrufanweisung handelt, wird die Anweisung bis zum Erreichen eines neuen Anrufs nachverfolgt. |
|||
Das Ziel wird ausgeführt, bis er eine Aufrufanweisung erreicht oder Eine Anweisung zurückgibt . Wenn es sich bei der aktuellen Anweisung um eine Anruf- oder Rückgabeanweisung handelt, wird die Anweisung bis zum Erreichen eines neuen Anrufs oder einer Rückgabe nachverfolgt. |
|||
Das Ziel wird ausgeführt, bis eine Art verzweigte Anweisung erreicht wird, einschließlich bedingter oder bedingungsloser Verzweigungen, Aufrufe, Rückgaben und Systemaufrufen. Wenn es sich bei der aktuellen Anweisung um eine Verzweigungsanweisung handelt, wird die Anweisung bis zum Erreichen einer neuen Verzweigungsanweisung nachverfolgt. |
|||
Das Ziel wird 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. Statistiken werden dann angezeigt. |
Weitere Informationen zum Neustarten des Zielcomputers finden Sie unter "Absturz" und "Neustarten des Zielcomputers".
Befehlszeilenoptionen
Wenn die Anwendung nicht sofort beendet werden soll, wenn sie gestartet oder geladen wird, 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 ist.
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 Timeout für die Unterbrechung festzulegen. Es gibt bestimmte Probleme, die dazu führen können, dass das Ziel nicht mit dem Debugger kommunizieren kann. Wenn ein Unterbrechungsbefehl ausgegeben wird und der Debugger nach diesem Zeitpunkt nicht in das Ziel unterteilt werden kann, zeigt der Debugger eine Meldung "Break-in timeout" an.
An diesem Punkt versucht der Debugger nicht mehr, in das Ziel einzubrechen. Stattdessen hält der Debugger das Ziel an und ermöglicht es Ihnen, die Zielanwendung (aber nicht zu steuern) zu untersuchen.
Das Standardtimeout beträgt 30 Sekunden.