Verwenden von Debuggererweiterungsbefehlen

Die Verwendung von Debuggererweiterungsbefehlen ähnelt sehr der Verwendung von Debuggerbefehlen. Der Befehl wird in das Fenster "Debuggerbefehl" eingegeben, wodurch entweder die Ausgabe in diesem Fenster oder eine Änderung der Zielanwendung oder des Zielcomputers erzeugt wird.

Ein tatsächlicher Debuggererweiterungsbefehl ist ein Einstiegspunkt in einer DLL, die vom Debugger aufgerufen wird.

Debuggererweiterungen werden durch die folgende Syntax aufgerufen:

! [Modul.]Erweiterung [Argumente]

Der Modulname sollte nicht mit der Dateinamenerweiterung .dll befolgt werden. Wenn das Modul einen vollständigen Pfad enthält, beträgt die Standardgröße der Zeichenfolge 255 Zeichen.

Wenn das Modul noch nicht geladen wurde, wird es mithilfe eines Aufrufs von LoadLibrary(module) in den Debugger geladen. Nachdem der Debugger die Erweiterungsbibliothek geladen hat, ruft er die GetProcAddress-Funktion auf, um den Erweiterungsnamen im Erweiterungsmodul zu suchen. Bei dem Erweiterungsnamen wird die Groß-/Kleinschreibung beachtet und muss genau so eingegeben werden, wie er in der DEF-Datei des Erweiterungsmoduls angezeigt wird. Wenn die Erweiterungsadresse gefunden wird, wird die Erweiterung aufgerufen.

Suchreihenfolge

Wenn der Modulname nicht angegeben ist, durchsucht der Debugger die geladenen Erweiterungsmodule für diesen Export.

Die Standardsuchreihenfolge lautet wie folgt:

  1. Die Erweiterungsmodule, die mit allen Betriebssystemen und in beiden Modi funktionieren: Dbghelp.dll und winext\ext.dll.

  2. Das Erweiterungsmodul, das in allen Modi funktioniert, aber betriebssystemspezifisch ist. Für Windows XP und höhere Versionen von Windows ist dies winxp\exts.dll.

  3. Das Erweiterungsmodul, das mit allen Betriebssystemen funktioniert, aber modusspezifisch ist. Für den Kernelmodus ist dies winext\kext.dll. Für den Benutzermodus ist dies "winext\uext.dll".

  4. Das Erweiterungsmodul, das sowohl betriebssystemspezifisch als auch modusspezifisch ist. In der folgenden Tabelle wird dieses Modul angegeben.

Benutzermodus Kernelmodus
winxp \ ntsdexts.dll winxp \ kdexts.dll

Wenn ein Erweiterungsmodul entladen wird, wird es aus der Suchkette entfernt. Wenn ein Erweiterungsmodul geladen wird, wird es am Anfang der Suchreihenfolge hinzugefügt. Der Befehl .setdll (Set Default Extension DLL) kann verwendet werden, um jedes Modul oben in der Suchkette höher zu stufen. Wenn Sie diesen Befehl wiederholt verwenden, können Sie die Suchkette vollständig steuern.

Verwenden Sie den Befehl .chain (Listendebuggererweiterungen), um eine Liste aller geladenen Erweiterungsmodule in ihrer aktuellen Suchreihenfolge anzuzeigen.

Wenn Sie versuchen, einen Erweiterungsbefehl auszuführen, der sich nicht in einem der geladenen Erweiterungsmodule befindet, wird eine Fehlermeldung "Nicht gefunden exportieren" angezeigt.