Freigeben über


Debuggerprogrammierungserweiterungs-APIs

Dieser Abschnitt umfasst Folgendes:

Übersicht über die Debugger-Engine

Verwenden der Debugger-Engine-API

Schreiben von DbgEng-Erweiterungen

EngExtCpp-Erweiterungen

Schreiben von WdbgExts-Erweiterungen

Anpassen der Debuggerausgabe mithilfe von DML

Verwenden von JavaScript zum Erweitern der Funktionen des Debuggers

Entwickeln von KDNET-Transporterweiterungsmodulen

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

Debugger-Engine

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

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.

Weitere Informationen finden Sie unter Übersicht über die Debugger-Engine und Verwenden der Debugger-Engine-API.

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.

    Weitere Informationen finden Sie unter Schreiben von DbgEng-Erweiterungen.

  • 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. Weitere Informationen finden Sie unter Schreiben von WdbgExts-Erweiterungen.

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 mit Visual Studio kompiliert und erstellt werden.

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.

Entwickeln von KDNET-Transporterweiterungsmodulen

Der KDNET-Transport kann erweitert werden, um auf jeder Hardware ausgeführt zu werden, indem eine separate Erweiterungsmodul-DLL des Hardwaretreibers verwendet wird. KDNET-Transporterweiterungsmodule werden von Netzwerk-Karte-Anbietern entwickelt, um spezifischen Netzwerkkarten Unterstützung für das Kerneldebuggen hinzuzufügen.

KDNET ist ein Kerneldebugtransport, der das Kerneldebuggen von Fenstern über ein Netzwerk ermöglicht. Es ist so konzipiert, dass die Hardwareunterstützungsebene in ein separates Modul von der Netzwerkpaketverarbeitungs- und Kernelschnittstellenebene integriert ist. Diese Hardwaretreiberunterstützungsebene wird als KDNET-Erweiterbarkeitsmodul bezeichnet. Weitere Informationen finden Sie unter Entwickeln von KDNET-Transporterweiterungsmodulen.