!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