!for_each_module
!for_each_module 擴充功能會針對每個載入的模組執行調試程式命令一次。
!for_each_module ["CommandString"]
!for_each_module -?
<參數
CommandString
指定調試程式命令,針對調試程式的模組清單中每個模組執行一次。 如果 CommandString 包含多個命令,您必須以分號分隔它們,並以引弧括 住 CommandString 。 如果您包含多個命令,CommandString 內的個別命令不能包含引號。
您可以在 CommandString 中使用下列別名,或在 CommandString 中命令執行的任何腳本中使用。
Alias | 資料類型 | 值 |
---|---|---|
@#FileVersion |
字串 |
模組的檔案版本。 |
@#ProductVersion |
字串 |
模組的產品版本。 |
@#ModuleIndex |
ULONG |
模組編號。 模組會連續列舉,從零開始。 |
@#ModuleName |
字串 |
模組名稱。 此名稱通常是沒有擴展名的檔名。 在某些情況下,模組名稱與檔名明顯不同。 |
@#ImageName |
字串 |
可執行檔的名稱,包括擴展名。 一般而言,完整路徑會包含在使用者模式中,但不包含在核心模式中。 |
@#LoadedImageName |
字串 |
除非Microsoft CodeView 符號存在,否則此別名與影像名稱相同。 |
@#MappedImageName |
字串 |
在大部分情況下,此別名為 NULL。 如果調試程式正在對應映像檔(例如,在小型傾印偵錯期間),這個別名就是對應的映像名稱。 |
@#SymbolFileName |
字串 |
符號檔的路徑和名稱。 如果您尚未載入任何符號,此別名就是可執行文件的名稱。 |
@#ModuleNameSize |
ULONG |
模組名稱字串的字串長度,加上一個。 |
@#ImageNameSize |
ULONG |
影像名稱字串的字串長度,加上一個。 |
@#LoadedImageNameSize |
ULONG |
載入影像名稱字串的字串長度,加上一個。 |
@#MappedImageNameSize |
ULONG |
對應影像名稱字串的字串長度,加上一個。 |
@#SymbolFileNameSize |
ULONG |
符號檔名字符串的字串長度,加上一個。 |
@#Base |
ULONG64 |
映射開頭的位址。 |
@#Size |
ULONG |
影像的大小,以位元組為單位。 |
@#End |
ULONG64 |
影像結尾的位址。 |
@#TimeDateStamp |
ULONG |
影像的時間和日期戳記。 如果您想要將此時間和日期戳記展開為可讀取的日期,請使用 .formats (Show Number Formats) 命令。 |
@#Checksum |
ULONG |
模組的總和檢查碼。 |
@#Flags |
ULONG |
模組旗標。 如需DEBUG_MODULE_Xxx 值的清單,請參閱 Dbgeng.h。 |
@#SymbolType |
USHORT |
符號類型。 如需DEBUG_SYMTYPE_Xxx 值的清單,請參閱 Dbgeng.h。 |
在針對每個模組執行 CommandString 之前,以及發生任何其他剖析之前,都會取代這些別名。 這些別名會區分大小寫。 您必須在別名前面加上空格,並在別名後面加上空格,即使別名以括弧括住也一樣。 如果您使用C++表達式語法,則必須將這些別名參考為 @@( @#alias)。
這些別名只能在呼叫 !for_each_module的存留期間使用。 請勿將它們與虛擬緩存器、固定名稱別名或使用者命名別名混淆。
-?
在 [調試程式命令] 視窗中顯示此延伸模組的一些說明文字。
DLL
Ext.dll
其他資訊
如需如何定義及使用別名做為輸入字元字串的快捷方式的詳細資訊(包括使用 ${ } Token),請參閱 使用別名。
備註
如果您未指定任何自變數, !for_each_module 延伸模組會顯示已載入模組的一般資訊。 這項信息類似於下列命令顯示的資訊。
!for_each_module .echo @#ModuleIndex : @#Base @#End @#ModuleName @#ImageName @#LoadedImageName
如需已載入和卸除模組的詳細資訊,請使用 lm (List Loaded Modules) 命令。
如果您啟用詳細資訊調試程序輸出,調試程式會在呼叫擴充功能時顯示已載入和卸除的模組總數,而調試程式會在針對該模組執行 CommandString 之前顯示每個模組的詳細資訊(包括每個可用別名的值)。
下列範例示範如何使用 !for_each_module 擴充功能。 下列命令會顯示全域偵錯旗標。
!for_each_module x ${@#ModuleName}!*Debug*Flag*
!for_each_module x ${@#ModuleName}!g*Debug*
下列命令會使用 !chkimg 擴充功能,檢查每個載入模組中的二進位損毀:
!for_each_module !chkimg @#ModuleName
下列命令會在每個載入的映像中搜尋模式 「MZ」。。
!for_each_module s-a @#Base @#End "MZ"
下列範例示範針對每個模組名稱使用 @#FileVersion 和 @#ProductVersion:
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