!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