Einführung in die Debugger-Engine

In dieser Dokumentation wird beschrieben, wie Sie die Debugger-Engine verwenden und Erweiterungen schreiben, die in WinDbg, KD, CDB und NTSD ausgeführt werden. Diese Debuggererweiterungen können beim Debuggen im Benutzer- oder Kernelmodus unter Microsoft Windows verwendet werden.

Debugger-Engine

Die Debugger-Engine bietet eine Schnittstelle zum Untersuchen und Bearbeiten von Debugzielen im Benutzer- und Kernelmodus unter Microsoft Windows.

Die Debugger-Engine kann Ziele abrufen, Haltepunkte festlegen, Ereignisse überwachen, Abfragesymbole, Lese- und Schreibspeicher sowie Threads und Prozesse in einem Ziel steuern.

Sie können die Debugger-Engine verwenden, um sowohl Debuggererweiterungsbibliotheken als auch eigenständige Anwendungen zu schreiben. Solche Anwendungen sind Debugger-Engine-Anwendungen. Eine Debugger-Engine-Anwendung, die die gesamte Funktionalität der Debugger-Engine verwendet, ist ein Debugger. Beispielsweise sind WinDbg, CDB, NTSD und KD Debugger. die Debugger-Engine stellt den Kern ihrer Funktionalität bereit.

Die Debugger-Engine-API wird durch die Prototypen in der Headerdatei dbgeng.h angegeben.

Unvollständige Dokumentation

Dies ist ein vorläufiges Dokument, das derzeit unvollständig ist.

Viele Konzepte im Zusammenhang mit den Debuggern und der Debugger-Engine, die hier noch nicht dokumentiert sind, finden Sie im Abschnitt Debugtechniken dieser Dokumentation.

Um einige der derzeit nicht dokumentierten Funktionen der Debugger-Engine-API abzurufen, verwenden Sie die Execute-Methode , um einzelne Debuggerbefehle auszuführen.

Erweiterungen

Sie können eigene Debugbefehle erstellen, indem Sie eine Erweiterungs-DLL schreiben und erstellen. Sie können beispielsweise einen Erweiterungsbefehl schreiben, um eine komplexe Datenstruktur anzuzeigen.

Es gibt drei verschiedene Typen von Debuggererweiterungs-DLLs:

  • DbgEng-Erweiterungs-DLLs. Diese basieren auf den Prototypen in der Headerdatei dbgeng.h. Jede DLL dieses Typs kann DbgEng-Erweiterungsbefehle exportieren. Diese Erweiterungsbefehle verwenden die Debugger-Engine-API und können auch die WdbgExts-API verwenden.

  • EngExtCpp-Erweiterungs-DLLs. Diese basieren auf den Prototypen in den Headerdateien engextcpp.h und dbgeng.h. Jede DLL dieses Typs kann DbgEng-Erweiterungsbefehle exportieren. Diese Erweiterungsbefehle verwenden sowohl die Debugger-Engine-API als auch das EngExtCpp-Erweiterungsframework und können auch die WdbgExts-API verwenden.

  • WdbgExts-Erweiterungs-DLLs. Diese basieren auf den Prototypen in der Headerdatei wdbgexts.h. Jede DLL dieses Typs exportiert einen oder mehrere WdbgExts-Erweiterungsbefehle. Diese Erweiterungsbefehle verwenden ausschließlich die WdbgExts-API.

Die DbgEng-API kann zum Erstellen von Erweiterungen oder eigenständigen Anwendungen verwendet werden. Die WdbgExts-API enthält eine Teilmenge der Funktionalität der Debugger-Engine-API und kann nur von Erweiterungen verwendet werden.

Alle Debuggererweiterungen sollten mithilfe des Hilfsprogramms Build kompiliert und erstellt werden. Das Build-Hilfsprogramm ist im Windows Driver Kit (WDK) enthalten.

Erweiterungscodebeispiele werden als Teil des Pakets Debugtools für Windows installiert, wenn Sie eine benutzerdefinierte Installation ausführen und die SDK-Komponente und alle zugehörigen Unterkomponenten auswählen. Sie finden sie im Unterverzeichnis sdk\samples des Installationsverzeichnisses Debugtools für Windows.

Die einfachste Möglichkeit, neue Debuggererweiterungen zu schreiben, besteht darin, die Beispielerweiterungen zu untersuchen. Jede Beispielerweiterung enthält Makefile- und Quelldateien für die Verwendung mit dem Build-Hilfsprogramm. Beide Arten von Erweiterungen werden in den Beispielen dargestellt.

Schreiben von benutzerdefinierten Analysedebuggererweiterungen

Sie können die Funktionen des ! analyze-Debuggerbefehls erweitern, indem Sie ein Analyseerweiterungs-Plug-In schreiben. Indem Sie ein Analyseerweiterungs-Plug-In bereitstellen, können Sie an der Analyse einer Fehlerüberprüfung oder einer Ausnahme teilnehmen, die für Ihre eigene Komponente oder Anwendung spezifisch ist. Wenn Sie ein Analyseerweiterungs-Plug-In schreiben, schreiben Sie auch eine Metadatendatei, die die Situationen beschreibt, für die Ihr Plug-In aufgerufen werden soll. Wenn !analyze ausgeführt wird, werden die entsprechenden Analyseerweiterungs-Plug-Ins gesucht, geladen und ausgeführt. Weitere Informationen finden Sie unter Schreiben von benutzerdefinierten Analysedebuggererweiterungen.

Anpassen der Debuggerausgabe mithilfe von DML

Sie können die Debuggerausgabe mithilfe von DML anpassen. Weitere Informationen finden Sie unter Anpassen der Debuggerausgabe mithilfe von DML.

Verwenden von JavaScript zum Erweitern der Funktionen des Debuggers

Verwenden Sie JavaScript, um Skripts zu erstellen, die Debuggerobjekte verstehen und die Funktionen des Debuggers erweitern und anpassen. JavaScript-Anbieter überbrücken eine Skriptsprache mit dem internen Objektmodell des Debuggers. Der JavaScript-Debuggerskriptanbieter ermöglicht die Verwendung von JavaScript mit dem Debugger. Weitere Informationen finden Sie unter JavaScript-Debuggerskripterstellung.