Compartilhar via


!for_each_module

A extensão !for_each_module executa um comando do depurador uma vez para cada módulo carregado.

!for_each_module ["CommandString"]
!for_each_module -?

<Parâmetros

Sequência de comandos
Especifica os comandos do depurador a serem executados uma vez para cada módulo na lista de módulos do depurador. Se CommandString incluir vários comandos, você deverá separá-los com ponto-e-vírgula e colocar CommandString entre aspas. Se você incluir vários comandos, os comandos individuais dentro de CommandString não poderão conter aspas.

Você pode usar os aliases a seguir em CommandString ou em qualquer script em que os comandos em CommandString são executados.

Alias Data type Valor

@#FileVersion

string

A versão de arquivo do módulo.

@#ProductVersion

string

A versão de produto do módulo.

@#ModuleIndex

ULONG

O número do módulo. Os módulos são enumerados consecutivamente, começando com zero.

@#ModuleName

string

O nome do módulo. Esse nome normalmente é o nome do arquivo sem a extensão de nome de arquivo. Em algumas situações, o nome do módulo difere significativamente do nome do arquivo.

@#ImageName

string

O nome do arquivo executável, incluindo a extensão do nome do arquivo. Normalmente, o caminho completo é incluído no modo de usuário, mas não no modo kernel.

@#LoadedImageName

string

A menos que os símbolos do Microsoft CodeView estejam presentes, esse alias é o mesmo que o nome da imagem.

@#MappedImageName

string

Na maioria das situações, esse alias é NULL. Se o depurador estiver mapeando um arquivo de imagem (por exemplo, durante a depuração do minidespejo), esse alias será o nome da imagem mapeada.

@#SymbolFileName

string

O caminho e o nome do arquivo de símbolo. Se você não tiver carregado um símbolo, esse alias será o nome do arquivo executável.

@#ModuleNameSize

ULONG

O comprimento da cadeia de caracteres do nome do módulo, mais um.

@#ImageNameSize

ULONG

O comprimento da cadeia de caracteres do nome da imagem, mais um.

@#LoadedImageNameSize

ULONG

O comprimento da cadeia de caracteres do nome da imagem carregada, mais um.

@#MappedImageNameSize

ULONG

O comprimento da cadeia de caracteres do nome da imagem mapeada, mais um.

@#SymbolFileNameSize

ULONG

O comprimento da cadeia de caracteres do nome do arquivo de símbolo, mais um.

@#Base

ULONG64

O endereço do início da imagem.

@#Size

ULONG

O tamanho da imagem, em bytes.

@#End

ULONG64

O endereço do fim da imagem.

@#TimeDateStamp

ULONG

O carimbo de hora e data da imagem. Se você quiser expandir esse carimbo de data e hora em uma data legível, use o comando .formats (Mostrar Formatos de Número).

@#Checksum

ULONG

A soma de verificação do módulo.

@#Flags

ULONG

Os sinalizadores do módulo. Para obter uma lista dos valores de DEBUG_MODULE_Xxx, consulte Dbgeng.h.

@#SymbolType

USHORT

O tipo de símbolo. Para obter uma lista dos valores de DEBUG_SYMTYPE_Xxx, consulte Dbgeng.h.

Esses aliases são todos substituídos antes que CommandString seja executado para cada módulo e antes que qualquer outra análise ocorra. Esses aliases diferenciam maiúsculas de minúsculas. Você deve adicionar um espaço antes do alias e um espaço depois dele, mesmo que o alias esteja entre parênteses. Se usar a sintaxe de expressão C++, você deverá fazer referência a esses aliases como @@( @#alias).

Esses aliases estarão disponíveis apenas durante o tempo de vida da chamada para !for_each_module. Não os confunda com pseudo-registros, aliases de nome fixo ou aliases de nome de usuário.

-?
Exibe um texto de Ajuda dessa extensão na janela Comando do Depurador.

DLL

Ext.dll

Informações Adicionais

Para obter mais informações sobre como definir e usar aliases como atalhos para inserir cadeias de caracteres (incluindo o uso do token ${ }), confira Usando aliases.

Comentários

Se você não especificar um argumento, a extensão !for_each_module exibirá informações gerais sobre os módulos carregados. Essas informações são semelhantes às informações que o comando a seguir mostra.

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

Para obter mais informações sobre módulos carregados e descarregados, use o comando lm (Listar Módulos Carregados).

Se você habilitar a saída detalhada do depurador, o depurador exibirá o número total de módulos carregados e descarregados quando a extensão for chamada, bem como informações detalhadas sobre cada módulo (incluindo os valores de cada alias disponível) antes que CommandString seja executado para esse módulo.

Os exemplos a seguir mostram como usar a extensão !for_each_module. Os comandos a seguir exibem os sinalizadores de depuração globais.

!for_each_module x ${@#ModuleName}!*Debug*Flag*
!for_each_module x ${@#ModuleName}!g*Debug*

O comando a seguir verifica se há corrupção binária em cada módulo carregado usando a extensão !chkimg:

!for_each_module !chkimg @#ModuleName

O comando a seguir procura o padrão "MZ" em cada imagem carregada.

!for_each_module s-a @#Base @#End "MZ"

O exemplo a seguir demonstra o uso de @#FileVersion e @#ProductVersion para cada nome de módulo:

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