Share via


!for_each_module

Die Erweiterung !for_each_module führt einen Debugger-Befehl für jedes geladene Modul einmalig aus.

!for_each_module ["CommandString"]
!for_each_module -?

<Parameter

CommandString
Gibt die Debugger-Befehle an, die für jedes Modul in der Modulliste des Debuggers einmal ausgeführt werden sollen. Wenn CommandString mehrere Befehle enthält, müssen Sie diese durch Semikolons trennen und CommandString in Anführungszeichen setzen. Wenn Sie mehrere Befehle einschließen, dürfen die einzelnen Befehle innerhalb von CommandString keine Anführungszeichen enthalten.

Sie können die folgenden Aliasnamen in CommandString oder in jedem Skript verwenden, das die Befehle in CommandString ausführt.

Alias Datentyp Wert

@#FileVersion

Zeichenfolge

Die Dateiversion des Moduls.

@#ProductVersion

Zeichenfolge

Die Produktversion des Moduls.

@#ModulIndex

ULONG

Die Modulnummer. Die Module werden fortlaufend aufgezählt, beginnend mit Null.

@#ModuleName

Zeichenfolge

Der Modulname. Dieser Name ist normalerweise der Dateiname ohne die Dateinamenerweiterung. In manchen Situationen weicht der Modulname erheblich vom Dateinamen ab.

@#ImageName

Zeichenfolge

Der Name der ausführbaren Datei, einschließlich der Dateinamenerweiterung. Normalerweise ist der vollständige Pfad im Benutzermodus enthalten, aber nicht im Kernelmodus.

@#LoadedImageName

Zeichenfolge

Wenn keine Microsoft CodeView-Symbole vorhanden sind, ist dieser Alias derselbe wie der Bildname.

@#MappedImageName

Zeichenfolge

In den meisten Situationen ist dieser Alias NULL. Wenn der Debugger eine Image-Datei abbildet (z. B. während des Minidump-Debugging), ist dieser Alias der Name des abgebildeten Images.

@#SymbolFileName

Zeichenfolge

Der Pfad und Name der Symboldatei. Wenn Sie keine Symbole geladen haben, ist dieser Alias stattdessen der Name der ausführbaren Datei.

@#ModuleNameSize

ULONG

Die Länge der Zeichenkette des Modulnamens, plus eins.

@#ImageNameSize

ULONG

Die Länge der Zeichenkette des Bildnamens, plus eins.

@#LoadedImageNameSize

ULONG

Die Länge der Zeichenfolge des geladenen Bildnamens, plus eins.

@#MappedImageNameSize

ULONG

Die Länge der Zeichenkette des gemappten Bildnamens, plus eins.

@#SymbolFileNameSize

ULONG

Die Länge der Zeichenkette des Symboldateinamens, plus eins.

@#Base

ULONG64

Die Adresse des Startpunkts des Bildes.

@#Size

ULONG

Die Größe des Bildes in Bytes.

@#End

ULONG64

Die Adresse des Endes des Bildes.

@#TimeDateStamp

ULONG

Der Zeit- und Datumsstempel des Bildes. Wenn Sie diesen Zeit- und Datumsstempel in ein lesbares Datum umwandeln möchten, verwenden Sie den Befehl .formats (Show Number Formats) .

@#Checksum

ULONG

Die Prüfsumme des Moduls.

@#Flags

ULONG

Die Modulkennzeichen. Eine Liste der DEBUG_MODULE_Xxx Werte finden Sie in Dbgeng.h.

@#SymbolType

USHORT

Der Symboltyp. Eine Liste der DEBUG_SYMTYPE_Xxx Werte finden Sie in Dbgeng.h.

Diese Aliase werden alle ersetzt, bevor CommandString für jedes Modul ausgeführt wird und bevor eine andere Analyse erfolgt. Bei diesen Aliasen wird zwischen Groß- und Kleinschreibung unterschieden. Sie müssen ein Leerzeichen vor und ein Leerzeichen nach dem Alias einfügen, auch wenn der Alias in Klammern eingeschlossen ist. Wenn Sie die C++-Ausdruckssyntax verwenden, müssen Sie auf diese Aliase als @@( @#alias) verweisen.

Diese Aliase sind nur während der Dauer des Aufrufs von !for_each_module verfügbar. Verwechseln Sie sie nicht mit Pseudoregistern, Aliasen mit festen Namen oder benutzerdefinierten Aliasen.

-?
Zeigt einen Hilfetext für diese Erweiterung im Befehlsfenster des Debugger an.

DLL

Ext.dll

Zusätzliche Informationen

Weitere Informationen über die Definition und Verwendung von Aliasen als Abkürzungen für die Eingabe von Zeichenketten (einschließlich der Verwendung des ${ }-Tokens) finden Sie unter Verwendung von Aliasen.

Hinweise

Wenn Sie keine Argumente angeben, zeigt die Erweiterung !for_each_module allgemeine Informationen über die geladenen Module an. Diese Informationen sind ähnlich wie die Informationen, die der folgende Befehl anzeigt.

!for_each_module .echo @#ModuleIndex : @#Base @#End @#ModuleName @#ImageName  @#LoadedImageName

Weitere Informationen über geladene und nicht geladene Module erhalten Sie mit dem Befehl lm (List Loaded Modules).

Wenn Sie die ausführliche Debugger-Ausgabe aktivieren, zeigt der Debugger die Gesamtzahl der geladenen und entladenen Module an, wenn die Erweiterung aufgerufen wird, und der Debugger zeigt detaillierte Informationen zu jedem Modul an (einschließlich der Werte jedes verfügbaren Alias), bevor CommandString für dieses Modul ausgeführt wird.

Die folgenden Beispiele zeigen, wie man die Erweiterung !for_each_module verwendet. Die folgenden Befehle zeigen die globalen Debug-Flags an.

!for_each_module x ${@#ModuleName}!*Debug*Flag*
!for_each_module x ${@#ModuleName}!g*Debug*

Der folgende Befehl überprüft jedes geladene Modul auf Binärfehler, indem er die Erweiterung !chkimg verwendet:

!for_each_module !chkimg @#ModuleName

Der folgende Befehl sucht in jedem geladenen Bild nach dem Muster „MZ“.

!for_each_module s-a @#Base @#End "MZ"

Das folgende Beispiel demonstriert die Verwendung von @#FileVersion und @#ProductVersion für jeden Modulnamen:

0:000> !for_each_module .echo @#ModuleName fver = @#FileVersion pver = @#ProductVersion 
USER32 fver = 6.0.6000.16438 (vista_gdr.070214-1610) pver = 6.0.6000.16438
kernel32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
ntdll fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
notepad fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
WINSPOOL fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
COMCTL32 fver = 6.10 (vista_rtm.061101-2205) pver = 6.0.6000.16386
SHLWAPI fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
msvcrt fver = 7.0.6000.16386 (vista_rtm.061101-2205) pver = 7.0.6000.16386
GDI32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
RPCRT4 fver = 6.0.6000.16525 (vista_gdr.070716-1600) pver = 6.0.6000.16525
SHELL32 fver = 6.0.6000.16513 (vista_gdr.070626-1505) pver = 6.0.6000.16513
ole32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
ADVAPI32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
COMDLG32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386