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.

.restart (Neustart der Zielanwendung)

Debuggen | Neu starten

STRG + UMSCHALT + F5

(Nur Benutzermodus) Startet die Zielanwendung neu.

g (Go)

Debuggen | Gehen

F5

Das Ziel wird frei ausgeführt.

gc (Vom bedingten Haltepunkt wechseln)

Setzt die Ausführung nach einem bedingten Haltepunkt fort.

gh (Gehen Sie mit behandelter Ausnahme)

Debuggen | Behandelte Ausnahme

Identisch mit g (Go), mit der Ausnahme, dass die aktuelle Ausnahme als behandelt wird.

gn (Mit Ausnahme nicht behandelt)

Debuggen | Nicht behandelte Ausnahme

Identisch mit g (Go), mit dem Unterschied, dass die aktuelle Ausnahme als unbehandelt behandelt wird.

gu (Go Up)

Debuggen | Step Out

UMSCHALT +F11

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

p (Schritt)

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.

pa (Schritt bis Adresse)

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

pc (Schritt zum nächsten Aufruf)

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.

pct (Schritt zum nächsten Anruf oder Zurück)

Das Ziel wird so lange ausgeführt, bis es eine Aufrufanweisung oder eine Rückgabeanweisung erreicht.

ph (Schritt zur nächsten Verzweigungsanweisung)

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.

pt (Schritt bis Nächste Rückgabe)

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

t (Ablaufverfolgung)

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.

ta (Ablaufverfolgung bis Adresse)

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

tb (Ablaufverfolgung zum nächsten Branch)

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

tc (Ablaufverfolgung zum nächsten Anruf)

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.

tct (Trace to Next Call or Return)

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.

th (Ablaufverfolgung zur nächsten Verzweigungsanweisung)

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.

tt (Ablaufverfolgung zur nächsten Rückgabe)

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.

wt (Ablaufverfolgungs- und Überwachungsdaten)

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.