Compartir a través de


!for_each_module

La extensión !for_each_module ejecuta un comando del depurador una vez para cada módulo cargado.

!for_each_module ["CommandString"]
!for_each_module -?

<Parámetros

CommandString
Especifica los comandos del depurador que se ejecutarán una vez para cada módulo de la lista de módulos del depurador. Si CommandString incluye varios comandos, debe separarlos con punto y coma y escribir CommandString entre comillas. Si incluye varios comandos, los comandos individuales de CommandString no pueden contener comillas.

Puede usar los siguientes alias en CommandString o en cualquier script que ejecuten los comandos de CommandString.

Alias Tipo de datos Valor

@#FileVersion

string

La versión del archivo del módulo.

@#ProductVersion

string

La versión del producto del módulo.

@#ModuleIndex

ULONG

El número de módulo. Los módulos se enumeran consecutivamente, empezando por cero.

@#ModuleName

string

Nombre del módulo. Este nombre suele ser el nombre de archivo sin la extensión del nombre de archivo. En ciertas situaciones, el nombre del módulo difiere significativamente del nombre de archivo.

@#ImageName

string

El nombre del archivo ejecutable, incluida la extensión de nombre de archivo. Normalmente, la ruta de acceso completa se incluye en modo de usuario, pero no en modo kernel.

@#LoadedImageName

string

A menos que los símbolos de Microsoft CodeView estén presentes, este alias es el mismo que el nombre de la imagen.

@#MappedImageName

string

En la mayoría de las situaciones, este alias es NULL. Si el depurador asigna un archivo de imagen (por ejemplo, durante la depuración de minivolcados), este alias es el nombre de la imagen asignada.

@#SymbolFileName

string

Ruta de acceso y nombre del archivo de símbolo. Si no ha cargado ningún símbolo, este alias es el nombre del archivo ejecutable en su lugar.

@#ModuleNameSize

ULONG

La longitud de la cadena de nombre del módulo, más una.

@#ImageNameSize

ULONG

La longitud de la cadena de nombre de la imagen, más una.

@#LoadedImageNameSize

ULONG

La longitud de la cadena de nombre de la imagen cargada, más una.

@#MappedImageNameSize

ULONG

La longitud de la cadena de nombre de la imagen asignada, más una.

@#SymbolFileNameSize

ULONG

La longitud de la cadena de nombre del archivo de símbolos, más una.

@#Base

ULONG64

La dirección del inicio de la imagen.

@#Size

ULONG

El tamaño de la imagen en bytes.

@#End

ULONG64

La dirección del final de la imagen.

@#TimeDateStamp

ULONG

La marca de fecha y hora de la imagen. Si quiere expandir esta marca de fecha y hora en una fecha legible, use el comando .formats (Show Number Formats.

@#Checksum

ULONG

La suma de verificación del módulo.

@#Flags

ULONG

Las marcas del módulo. Para obtener una lista de los valores DEBUG_MODULE_Xxx, consulte Dbgeng.h.

@#SymbolType

USHORT

El tipo de símbolo. Para obtener una lista de los valores DEBUG_SYMTYPE_Xxx, consulte Dbgeng.h.

Estos alias se reemplazan antes de ejecutar CommandString para cada módulo y antes de que se produzca cualquier otro análisis. Estos alias distinguen mayúsculas de minúsculas. Debe añadir un espacio antes del alias y un espacio después de él, incluso si el alias está entre paréntesis. Si usa la sintaxis de expresión de C++, debe hacer referencia a estos alias como @@( @#alias).

Estos alias solo están disponibles durante la vigencia de la llamada a !for_each_module. No los confunda con seudoregistros, alias de nombre fijo o alias con nombre de usuario.

-?
Muestra un texto de ayuda para esta extensión en la ventana Comando del depurador.

Archivo DLL

Ext.dll

Información adicional

Para obtener más información sobre cómo definir y usar alias como accesos directos para escribir cadenas de caracteres (incluido el uso del token ${ }), consulte Usar alias.

Comentarios

Si no especifica ningún argumento, la extensión !for_each_module muestra información general sobre los módulos cargados. Esta información es similar a la información que muestra el comando siguiente.

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

Para obtener más información sobre los módulos cargados y descargados, use el comando lm (List Loaded Modules).

Si habilita la salida detallada del depurador, el depurador muestra el número total de módulos cargados y descargados cuando se llama a la extensión y el depurador muestra información detallada sobre cada módulo (incluidos los valores de cada alias disponible) antes de ejecutar CommandString para ese módulo.

En los ejemplos siguientes se muestra cómo usar la extensión !for_each_module. Los siguientes comandos muestran las marcas de depuración globales.

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

El siguiente comando comprueba si hay daños binarios en cada módulo cargado usando la extensión !chkimg:

!for_each_module !chkimg @#ModuleName

El comando siguiente busca el patrón "MZ" en cada imagen cargada.

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

En el ejemplo siguiente se muestra el uso de @#FileVersion y @#ProductVersion para cada nombre 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