共用方式為


!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