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.

.restart (Restart Target Application)

Debuggen | Neustarten

STRG+UMSCHALT+F5

(Nur Benutzermodus) Startet die Zielanwendung neu.

g (Gehe zu)

Debuggen | Los

F5

Ziel wird frei ausgeführt.

gc (Go from Conditional Breakpoint)

Setzt die Ausführung nach einem bedingten Haltepunkt fort.

gh (Gehe mit Ausnahme behandelt)

Debuggen | Behandelte Ausnahme

Identisch mit g (Go),außer dass die aktuelle Ausnahme als behandelt behandelt wird.

gn (Gehe mit Ausnahme nicht behandelt)

Debuggen | Unbehandelte Ausnahme

Identisch mit g (Go), außer dass die aktuelle Ausnahme als unbehandelt behandelt wird.

gu (Go Up)

Debuggen | Ausschreiten

UMSCHALT+F11

Das Ziel wird ausgeführt, bis die aktuelle Funktion abgeschlossen ist.

p (Step)

Debuggen | Schritt-über

F10

Ziel führt eine Anweisung aus. Wenn diese Anweisung ein Funktionsaufruf ist, wird diese Funktion als einzelner Schritt ausgeführt.

pa (Schritt zu Adresse)

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).

PC (Schritt zum nächsten Anruf)

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.

pct (Schritt zum nächsten Anruf oder Rückgabe)

Das Ziel wird ausgeführt, bis er eine Aufrufanweisung oder eine Rückgabeanweisung erreicht.

ph (Schritt zum nächsten Verzweigungsanweisung)

Das Ziel wird ausgeführt, bis eine Art verzweigte Anweisung erreicht wird, einschließlich bedingter oder bedingungsloser Verzweigungen, Aufrufe, Rückgaben und Systemaufrufen.

pt (Schritt zur nächsten Rückgabe)

Das Ziel wird ausgeführt, bis es eine Rückgabeanweisung erreicht.

t (Ablaufverfolgung)

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.

ta (Ablaufverfolgung an Adresse)

Das Ziel wird ausgeführt, bis es die angegebene Adresse erreicht. Alle Schritte in dieser Funktion und die aufgerufenen Funktionen werden angezeigt.

tb (Trace to Next Branch)

(Alle Modi, mit Ausnahme des Kernelmodus, nur auf x86-basierten Systemen) Das Ziel wird ausgeführt, bis die nächste Verzweigungsanweisung erreicht wird.

tc (Trace to Next Call)

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.

tct (Trace to Next Call or Return)

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.

th (Trace to Next Branching Instruction)

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.

tt (Spur zur nächsten Rückgabe)

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.

wt (Trace and Watch Data)

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.