Поделиться через


!for_each_module

Расширение !for_each_module выполняет команду отладчика один раз для каждого загруженного модуля.

!for_each_module ["CommandString"]
!for_each_module -?

<Параметры

CommandString
Указывает команды отладчика для выполнения по одному разу для каждого модуля в списке модулей отладчика. Если CommandString содержит несколько команд, их необходимо разделить точкой с запятой и заключить CommandString в кавычки. Если включить несколько команд, отдельные команды в CommandString не могут содержать кавычки.

Вы можете использовать следующие псевдонимы в CommandString или в любом скрипте, который выполняет команды в CommandString .

Псевдоним Тип данных Значение

@#FileVersion

строка

Версия файла модуля.

@#ProductVersion

строка

Версия продукта модуля.

@#ModuleIndex

ULONG

Номер модуля. Модули перечисляются последовательно, начиная с нуля.

@#ModuleName

строка

Имя модуля. Обычно это имя файла без расширения имени файла. В некоторых ситуациях имя модуля значительно отличается от имени файла.

@#ImageName

строка

Имя исполняемого файла, включая расширение имени файла. Как правило, полный путь включен в пользовательский режим, но не в режиме ядра.

@#LoadedImageName

строка

Если символы Microsoft CodeView отсутствуют, этот псевдоним совпадает с именем изображения.

@#MappedImageName

строка

В большинстве случаев этот псевдоним имеет значение NULL. Если отладчик сопоставляет файл изображения (например, во время отладки minidump), этот псевдоним — это имя сопоставленного изображения.

@#SymbolFileName

строка

Путь и имя файла символов. Если вы не загрузили символы, этот псевдоним — это имя исполняемого файла.

@#ModuleNameSize

ULONG

Длина строки имени модуля, а также одна.

@#ImageNameSize

ULONG

Длина строки имени изображения, а также одна.

@#LoadedImageNameSize

ULONG

Длина строки загруженного имени изображения плюс одна.

@#MappedImageNameSize

ULONG

Длина строки сопоставленного имени изображения плюс одна.

@#SymbolFileNameSize

ULONG

Длина строки имени файла символов плюс одна.

@#Base

ULONG64

Адрес начала изображения.

@#Size

ULONG

Размер изображения в байтах.

@#End

ULONG64

Адрес конца изображения.

@#TimeDateStamp

ULONG

Метка времени и даты изображения. Если вы хотите развернуть это время и метку даты на удобочитаемую дату, используйте команду .форматов (показать форматы чисел).

@#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

Дополнительная информация

Дополнительные сведения об определении и использовании псевдонимов в качестве сочетаний клавиш для ввода символьных строк (включая использование маркера ${ } см. в разделе "Использование псевдонимов".

Замечания

Если аргументы не указаны, расширение !for_each_module отображает общие сведения о загруженных модулях. Эти сведения похожи на сведения, отображаемые в следующей команде.

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

Дополнительные сведения о загруженных и выгрузочных модулях используйте команду lm (список загруженных модулей).

Если включить подробные выходные данные отладчика, отладчик отображает общее количество загруженных и выгрузленных модулей при вызове расширения, а отладчик отображает подробные сведения о каждом модуле (включая значения каждого доступного псевдонима) перед выполнением 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