Verwenden von Debuggererweiterungsbefehlen

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

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

Debuggererweiterungen werden mit der folgenden Syntax aufgerufen:

! [Modul.]extension[arguments]

Der Modulname sollte nicht mit der Dateinamenerweiterung .dll angegeben werden. Wenn das Modul einen vollständigen Pfad enthält, beträgt die Standardzeichenfolgengröße 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. Beim 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 an den Anfang der Suchkette hochzustufen. 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 in keinem der geladenen Erweiterungsmodule befindet, wird die Fehlermeldung Export Not Found angezeigt.