Condividi tramite


!for_each_module

L'estensione !for_each_module esegue un comando debugger una volta per ogni modulo caricato.

!for_each_module ["CommandString"]
!for_each_module -?

<Parametri

CommandString
Specifica i comandi del debugger da eseguire una sola volta per ogni modulo nell'elenco dei moduli del debugger. Se CommandString include più comandi, è necessario separarli con punti e virgola e racchiudere CommandString tra virgolette. Se si includono più comandi, i singoli comandi all'interno di CommandString non possono contenere virgolette.

È possibile usare gli alias seguenti in CommandString o in qualsiasi script eseguito dai comandi in CommandString .

Alias Tipo di dati Valore

@#FileVersion

string

Versione del file del modulo.

@#ProductVersion

string

Versione del prodotto del modulo.

@#ModuleIndex

ULONG

Numero del modulo. I moduli vengono enumerati consecutivamente, a partire da zero.

@#ModuleName

string

Nome del modulo. Questo nome è in genere il nome del file senza l'estensione del nome file. In alcune situazioni, il nome del modulo differisce in modo significativo dal nome del file.

@#ImageName

string

Nome del file eseguibile, inclusa l'estensione del nome file. In genere, il percorso completo è incluso in modalità utente, ma non in modalità kernel.

@#LoadedImageName

string

A meno che non siano presenti simboli di Microsoft CodeView, questo alias corrisponde al nome dell'immagine.

@#MappedImageName

string

Nella maggior parte dei casi, questo alias è NULL. Se il debugger esegue il mapping di un file di immagine,ad esempio durante il debug di minidump, questo alias è il nome dell'immagine mappata.

@#SymbolFileName

string

Percorso e nome del file di simboli. Se non sono stati caricati simboli, questo alias è invece il nome del file eseguibile.

@#ModuleNameSize

ULONG

Lunghezza della stringa del nome del modulo, più una.

@#ImageNameSize

ULONG

Lunghezza della stringa del nome dell'immagine, più una.

@#LoadedImageNameSize

ULONG

Lunghezza della stringa del nome dell'immagine caricata, più una.

@#MappedImageNameSize

ULONG

Lunghezza della stringa del nome dell'immagine mappata, più una.

@#SymbolFileNameSize

ULONG

Lunghezza della stringa del nome del file di simboli, più una.

@#Base

ULONG64

Indirizzo dell'inizio dell'immagine.

@#Size

ULONG

Dimensioni dell'immagine, in byte.

@#End

ULONG64

Indirizzo della fine dell'immagine.

@#TimeDateStamp

ULONG

Indicatore di data e ora dell'immagine. Se si desidera espandere questo indicatore di data e ora in una data leggibile, usare il comando .formats (Show Number Formats).

@#Checksum

ULONG

Checksum del modulo.

@#Flags

ULONG

Flag del modulo. Per un elenco dei valori DEBUG_MODULE_Xxx , vedere Dbgeng.h.

@#SymbolType

USHORT

Tipo di simbolo. Per un elenco dei valori DEBUG_SYMTYPE_Xxx , vedere Dbgeng.h.

Questi alias vengono tutti sostituiti prima dell'esecuzione di CommandString per ogni modulo e prima che si verifichi un'altra analisi. Questi alias fanno distinzione tra maiuscole e minuscole. È necessario aggiungere uno spazio prima dell'alias e uno spazio dopo di esso, anche se l'alias è racchiuso tra parentesi. Se si usa la sintassi delle espressioni C++, è necessario fare riferimento a questi alias come @@( @#alias).

Questi alias sono disponibili solo durante la durata della chiamata a !for_each_module. Non confonderli con pseudoregistri, alias a nome fisso o alias denominati dall'utente.

-?
Visualizza il testo della Guida per questa estensione nella finestra Del comando del debugger.

DLL

Ext.dll

Informazioni aggiuntive

Per altre informazioni su come definire e usare alias come tasti di scelta rapida per l'immissione di stringhe di caratteri (incluso l'uso del token ${ } ), vedere Uso degli alias.

Osservazioni:

Se non si specificano argomenti, l'estensione !for_each_module visualizza informazioni generali sui moduli caricati. Queste informazioni sono simili alle informazioni mostrate dal comando seguente.

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

Per altre informazioni sui moduli caricati e scaricati, usare il comando lm (Elenca moduli caricati).

Se si abilita l'output dettagliato del debugger, il debugger visualizza il numero totale di moduli caricati e scaricati quando viene chiamata l'estensione e il debugger visualizza informazioni dettagliate su ogni modulo (inclusi i valori di ogni alias disponibile) prima dell'esecuzione di CommandString per tale modulo.

Negli esempi seguenti viene illustrato come usare l'estensione !for_each_module . I comandi seguenti visualizzano i flag di debug globali.

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

Il comando seguente verifica la presenza di danneggiamento binario in ogni modulo caricato usando l'estensione !chkimg :

!for_each_module !chkimg @#ModuleName

Il comando seguente cerca il modello "MZ" in ogni immagine caricata.

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

Nell'esempio seguente viene illustrato l'uso di @#FileVersion e @#ProductVersion per ogni nome di modulo:

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