!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