Freigeben über


Verwendung von KDbgCtrl

Das Tool KDbgCtrl (Kernel Debugging Control, kdbgctrl.exe) kann verwendet werden, um die Verbindung zum Debuggen des Kernels vom Zielcomputer aus zu steuern.

Um dieses Tool zu verwenden, muss auf Ihrem Zielcomputer Windows Server 2003 oder eine neuere Version von Windows ausgeführt werden.

Mit KDbgCtrl können Sie fünf verschiedene Einstellungen festlegen: Vollständiges Kernel-Debuggen, Automatisches Kernel-Debuggen, Fehlerbehandlung im Benutzermodus, Blockieren des Kernel-Debuggens und die Größe des DbgPrint-Puffers.

Um KDbgCtrl zu verwenden, müssen Sie das Debuggen des Kernels in den Starteinstellungen des Zielcomputers bereits vor dem letzten Start festgelegt haben. KDbgCtrl kann nicht zum Debuggen des Kernels verwendet werden, wenn dies nicht geschehen ist. Siehe Boot-Parameter zum Aktivieren des Debugging für Details zu diesen Boot-Einstellungen.

Vollständiges Kernel-Debuggen

Wenn das vollständige Debuggen des Kernels aktiviert ist, kann ein auf dem Host-Computer ausgeführter Kernel-Debugger in den Zielcomputer eingreifen. Der Zielcomputer greift auf den Kernel-Debugger zu, wenn eine Ausnahme im Kernel-Modus auftritt. Nachrichten vom Ziel zum Host, wie z. B. DbgPrint-Ausgaben, Nachrichten zum Laden von Symbolen und umgeleitete Debugger im Benutzermodus, sind ebenfalls zugelassen.

Wenn diese Einstellung deaktiviert ist, werden alle Signale vom Host-Computer vom Ziel ignoriert.

Vollständiges Kernel-Debugging ist standardmäßig aktiviert. Um den aktuellen Wert der Einstellung zu überprüfen, verwenden Sie kdbgctrl -c. Um diese Einstellung zu deaktivieren, verwenden Sie kdbgctrl -d. Um diese Einstellung zu aktivieren, verwenden Sie kdbgctrl -e.

Wenn Sie die aktuelle Einstellung überprüfen und zur Steuerung der Ausführung innerhalb einer Batch-Datei verwenden möchten, können Sie den Befehl kdbgctrl -cx verwenden. Einzelheiten zu diesem Befehl finden Sie unter KDbgCtrl-Kommandozeilenoptionen.

Automatisches Kernel-Debuggen

Wenn das vollständige Debuggen des Kernels aktiviert ist, ist die aktuelle Einstellung für das automatische Kernel-Debuggen unerheblich – jegliche Kommunikation ist erlaubt.

Wenn das vollständige Kernel-Debuggen deaktiviert und das automatische Kernel-Debuggen aktiviert ist, kann nur der Zielcomputer eine Debugging-Verbindung initiieren.

In diesem Fall führt nur eine Ausnahme im Kernel-Modus, ein Haltepunkt oder ein anderes Ereignis im Kernel-Modus dazu, dass eine Verbindung hergestellt wird. Die Verbindung wird nicht für DbgPrint-Ausgaben, Nachrichten zum Laden von Symbolen, umgeleitete Debugger-Eingaben und -Ausgaben im Benutzermodus oder andere ähnliche Nachrichten hergestellt – diese werden im DbgPrint-Puffer gespeichert, anstatt an den Kernel-Debugger gesendet zu werden.

Wenn eine Ausnahme oder ein Ereignis dazu führt, dass das Ziel in den Kernel-Debugger eingreift, wird das vollständige Kernel-Debugging automatisch eingeschaltet, so als ob Sie kdbgctrl -e ausgeführt hätten.

Das automatische Kernel-Debugging ist standardmäßig deaktiviert (dies ist jedoch unerheblich, solange nicht auch das vollständige Kernel-Debugging deaktiviert ist). Um den aktuellen Wert der Einstellung zu überprüfen, verwenden Sie kdbgctrl -ca. Um diese Einstellung zu deaktivieren, verwenden Sie kdbgctrl -da. Um diese Einstellung zu aktivieren, verwenden Sie kdbgctrl -ea.

Fehlerbehandlung im Benutzermodus

Wenn die Fehlerbehandlung im Benutzermodus aktiviert ist, führen einige Ereignisse im Benutzermodus dazu, dass der Zielcomputer in den Kernel-Debugger wechselt.

Insbesondere alle int 3 Interrupts – wie Haltepunkte, die von einem Debugger in den Code eingefügt werden, oder Aufrufe von DbgBreakPoint – führen zu einem Wechsel in den Kernel-Debugger. Standardausnahmen – wie Zugriffsverletzungen und Division durch Null – werden jedoch normalerweise nicht an den Kernel-Debugger gesendet.

Wenn ein Debugger für den Benutzermodus bereits an den Prozess angehängt ist, erfasst dieser Debugger alle Fehler im Benutzermodus, und der Kernel-Debugger wird nicht verändert. Die Rangfolge der verschiedenen Benutzermodus-Fehlerhandler finden Sie unter Postmortem-Debugging aktivieren.

Damit die Fehlerbehandlung im Benutzermodus funktioniert, muss entweder das vollständige Debuggen des Kernels oder das automatische Debuggen des Kernels ebenfalls aktiviert sein.

Die Fehlerbehandlung im Benutzermodus ist standardmäßig aktiviert. Um den aktuellen Wert der Einstellung zu überprüfen, verwenden Sie kdbgctrl -cu. Um diese Einstellung zu deaktivieren, verwenden Sie kdbgctrl -du. Um diese Einstellung zu aktivieren, verwenden Sie kdbgctrl -eu.

Blockieren des Kernel-Debuggens

In manchen Fällen möchten Sie den Zielcomputer für das Debuggen des Kernels einrichten, das Debuggen des Kernels aber erst nach dem Start des Zielcomputers aktivieren. Das können Sie tun, indem Sie das Debuggen des Kernels blockieren.

Wichtig

Bevor Sie BCDEdit zum Ändern der Startinformationen verwenden, müssen Sie möglicherweise die Windows-Sicherheitsfunktionen wie BitLocker und Sicherer Start auf dem Testcomputer vorübergehend aussetzen. Aktivieren Sie diese Sicherheitsfeatures nach Abschluss des Tests erneut, und verwalten Sie den Test-PC entsprechend, wenn die Sicherheitsfeatures deaktiviert sind.

Um das Debuggen des Kernels zu blockieren, legen Sie den Zielcomputer mit ähnlichen Befehlen wie den folgenden fest:

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:32 /start DISABLE /noumex

Wenn Sie den Zielcomputer neu starten, wird er für das Debuggen des Kernels vorbereitet, aber das Debuggen des Kernels und die Fehlerbehandlung im Benutzermodus werden deaktiviert. Zu diesem Zeitpunkt kann sich ein Host-Computer nicht mit dem Zielcomputer verbinden, Fehlerprüfungen werden vom Kernel-Debugger nicht abgefangen und Ausnahmen im Benutzermodus führen nicht zu einem Einstieg in den Kernel-Debugger.

Wenn Sie bereit sind, können Sie das Debuggen des Kernels aktivieren (ohne den Zielcomputer neu zu starten), indem Sie die folgenden Befehle eingeben.

kdbgctrl -db
kdbgctrl -e

Später können Sie das Debuggen des Kernels deaktivieren, indem Sie die folgenden Befehle eingeben.

kdbgctrl -d
kdbgctrl -eb

Sie können kdbgctrl -cb verwenden, um zu überprüfen, ob das Debuggen des Kernels blockiert ist.

Die Größe des DbgPrint-Puffers

Der DbgPrint-Puffer speichert Nachrichten, die der Zielcomputer an den Kernel-Debugger gesendet hat.

Wenn das vollständige Kernel-Debugging aktiviert ist, werden diese Nachrichten automatisch im Kernel-Debugger angezeigt. Wenn diese Option jedoch deaktiviert ist, werden diese Nachrichten im Puffer gespeichert. Zu einem späteren Zeitpunkt können Sie das Debuggen des Kernels aktivieren, sich mit einem Kernel-Debugger verbinden und die Erweiterung !dbgprint verwenden, um den Inhalt dieses Puffers zu sehen. Weitere Informationen über diesen Puffer finden Sie unter "Der DbgPrint-Puffer".

Die Standardgröße des DbgPrint-Puffers ist bei einem beliebigen Build von Windows 4 KB. Um die aktuelle Puffergröße zu ermitteln, verwenden Sie kdbgctrl -cdb. Um die Puffergröße zu ändern, verwenden Sie kdbgctrl -sdbSize, wobei Size die neue Puffergröße angibt. Einzelheiten zur Syntax finden Sie unter KDbgCtrl-Kommandozeilenoptionen.

Beispiele

Um alle aktuellen Einstellungen anzuzeigen, verwenden Sie den folgenden Befehl:

kdbgctrl -c -ca -cu -cb -cdb 

Um die Standardeinstellungen wiederherzustellen, verwenden Sie den folgenden Befehl:

kdbgctrl -e -da -eu -db -sdb 0x1000 

Um den Host-Computer zu sperren, sodass er nur bei Ausnahmen kontaktiert wird, verwenden Sie den folgenden Befehl:

kdbgctrl -d -ea -eu 

Um das gesamte Debuggen des Kernels zu deaktivieren, verwenden Sie den folgenden Befehl:

kdbgctrl -d -da 

Wenn Sie das gesamte Debuggen des Kernels deaktivieren, sollten Sie auch die Größe des DbgPrint-Puffers erhöhen. Dadurch wird sichergestellt, dass alle Nachrichten gespeichert werden, falls Sie sie später noch einmal sehen wollen. Wenn Sie ein Megabyte Speicherplatz zur Verfügung haben, können Sie den folgenden Befehl verwenden:

kdbgctrl -sdb 0x100000