Moduswechsel
Wenn Sie das Debuggen im Benutzermodus über den Kerneldebugger steuern, treffen Sie auf vier verschiedene Modi und können zwischen ihnen auf verschiedene Arten wechseln.
Hinweis Bei der Beschreibung dieses Szenarios bezieht sich die Zielanwendung auf die Benutzermodusanwendung, die debuggiert wird, der Zielcomputer auf den Computer, der die Zielanwendung und den CDB- oder NTSD-Prozess enthält, und der Hostcomputer auf den Computer, der den Kerneldebugger enthält.
Es werden die folgenden vier Modi gefunden:
Debuggen im Benutzermodus
Der Zielcomputer und die Zielanwendung werden eingefroren. Die Debugaufforderung im Benutzermodus wird im Fenster Debuggerbefehl des Kerneldebuggers angezeigt. In WinDbg zeigt die Eingabeaufforderung im unteren Bereich des WinDbg-Fensters Eingabe> an. Sie können Befehle an dieser Eingabeaufforderung eingeben, als ob sie während des Debuggens im Benutzermodus eingegeben würden, um den Zustand der Zielanwendung zu analysieren oder zu veranlassen, dass sie ausgeführt oder schrittweise ausgeführt wird. Symboldateien, Erweiterungs-DLLs und andere Dateien, auf die der Debugger zugreift, sind diese Dateien auf dem Zielcomputer, nicht der Hostcomputer.
Zielanwendungsausführung
Der Zielcomputer wird ausgeführt, die Zielanwendung wird ausgeführt, und der Debugger wartet. Dieser Modus entspricht dem Ausführen des Ziels beim normalen Debuggen.
Schlafmodus
Der Zielcomputer wird ausgeführt, aber die Zielanwendung ist eingefroren, und beide Debugger sind eingefroren. Dieser Modus ist nützlich, wenn Sie auf dem Zielcomputer etwas tun müssen, aber den Zustand der Debugsitzung nicht ändern möchten.
Debuggen im Kernelmodus
Der Zielcomputer und die Zielanwendung werden eingefroren. Die Debugaufforderung kd> im Kernelmodus wird im Debuggerbefehlsfenster des Kerneldebuggers angezeigt. Dieser Modus ist der typische Debugzustand im Kernelmodus.
Die Sitzung beginnt im Debugmodus des Benutzermodus. Die folgenden Aktionen und Ereignisse führen dazu, dass sich der Modus ändert:
Um vom Debuggen im Benutzermodus zur Zielanwendungsausführung zu wechseln, verwenden Sie den Befehl g (Go) an der
Input>
Eingabeaufforderung.Um vorübergehend vom Debuggen im Benutzermodus zur Zielanwendungsausführung zu wechseln und dann zum Debuggen im Benutzermodus zurückzukehren, verwenden Sie einen Schritt, eine Ablaufverfolgung oder einen anderen temporären Ausführungsbefehl. Eine Liste solcher Befehle finden Sie unter Steuern des Ziels.
Um vom Debuggen im Benutzermodus in den Ruhemodus zu wechseln, verwenden Sie den Befehl .sleep (Debugger anhalten). Dieser Befehl ist zeitlimitiert. Wenn die Zeit abläuft, kehrt das System zum Debuggen im Benutzermodus zurück.
Um vom Debuggen im Benutzermodus zum Debuggen im Kernelmodus zu wechseln, verwenden Sie den Befehl .breakin (Break to the Kernel Debugger). Beachten Sie, dass .breakin möglicherweise mit einem Zugriff verweigerten Fehler fehlschlägt, wenn der aufrufende Prozess nicht über Administratorrechte verfügt. Wechseln Sie in diesem Fall zu KD, indem Sie einen kurzen Sleep-Befehl ausgeben und STRG+C drücken.
Sie können nur in bestimmten Umgebungen von der Ausführung der Zielanwendung zum Debuggen im Benutzermodus wechseln. Wenn auf dem Zielcomputer Microsoft Windows XP oder eine höhere Version des Windows-Betriebssystems ausgeführt wird, können Sie den Erweiterungsbefehl !bpid verwenden. Wenn Sie CDB (nicht NTSD) verwenden, können Sie das CDB-Fenster auf dem Zielcomputer aktivieren und STRG+C drücken.
Wenn die Zielanwendung einen Haltepunkt erreicht, eine Ausnahme auftritt, ein anderes kontrolliertes Ereignis auftritt oder endet, wechselt das System von der Zielanwendungsausführung zum Debuggen im Benutzermodus. Sie sollten solche Ereignisse im Voraus planen, insbesondere wenn Sie NTSD verwenden. Weitere Informationen zu diesen Ereignissen finden Sie unter Verwenden von Haltepunkten und Steuern von Ausnahmen und Ereignissen.
Wenn Sie von der Zielanwendungsausführung zum Debuggen im Kernelmodus wechseln möchten, drücken Sie STRG+C im KD-Fenster, drücken Sie STRG+BREAK, oder klicken Sie im Fenster WinDbg auf das Menü Debuggen , oder drücken Sie SYSRQ oder ALT+SYSRQ auf der Tastatur des Zielcomputers. (Wenn Ihr Kerneldebugger KD ist und Sie STRG+C gleichzeitig drücken, während der Kerneldebugger mit dem Benutzermodusdebugger kommuniziert, erfasst der Benutzermodusdebugger möglicherweise, dass Sie STRG+C drücken.)
Wenn beim Debugger ein Kernelfehler auftritt oder Sie das Breakin.exe-Tool verwenden, wechselt das System von der Zielanwendungsausführung zum Debuggen im Kernelmodus.
Um vom Ruhemodus zum Debuggen im Benutzermodus zu wechseln, warten Sie, bis die Standbyzeit abläuft, starten Sie einen neuen CDB-Prozess auf dem Zielcomputer mithilfe der Befehlszeilenoption -wake oder verwenden Sie den Befehl .wake (Wake Debugger) in einer anderen Kopie von CDB oder NTSD auf dem Zielcomputer.
Um das Debuggen im Kernelmodus zu deaktivieren, verwenden Sie den Befehl g (Go) an der
kd>
Eingabeaufforderung. Dieser Befehl kehrt zum Debuggen im Benutzermodus oder zur Zielanwendungsausführung zurück (je nachdem, was der zuletzt verwendete Zustand war).