x (Esaminare i simboli)

Il comando x visualizza i simboli in tutti i contesti corrispondenti al modello specificato.

x [Options] Module!Symbol 
x [Options] *

Parametri

Opzioni Specifica le opzioni di ricerca dei simboli. È possibile usare una o più delle opzioni seguenti:

/0
Visualizza solo l'indirizzo di ogni simbolo.

/1
Visualizza solo il nome di ogni simbolo.

/2
Visualizza solo l'indirizzo e il nome di ogni simbolo (non il tipo di dati).

/D
Visualizza l'output usando Debugger Markup Language.

/T
Visualizza il tipo di dati di ogni simbolo, se il tipo di dati è noto.

/Presso
Visualizza il tipo di simbolo (locale, globale, parametro, funzione o sconosciuto) di ogni simbolo. Questa opzione visualizza anche le dimensioni di ogni simbolo. Le dimensioni di un simbolo di funzione sono le dimensioni della funzione in memoria. Le dimensioni di altri simboli sono le dimensioni del tipo di dati rappresentato dal simbolo. Le dimensioni vengono sempre misurate in byte e visualizzate in formato esadecimale.

/sSize
Visualizza solo i simboli le cui dimensioni, in byte, corrispondono al valore di Size. Le dimensioni di un simbolo di funzione sono le dimensioni della funzione in memoria. Le dimensioni di altri simboli sono le dimensioni del tipo di dati rappresentato dal simbolo. I simboli le cui dimensioni non possono essere determinate vengono sempre visualizzate. Le dimensioni devono essere un intero diverso da zero.

/D
Visualizza i nomi dei simboli in formato virgolette.

/P
Omette lo spazio prima della parentesi di apertura quando il debugger visualizza un nome di funzione e i relativi argomenti. Questo tipo di visualizzazione può semplificare se si copiano nomi di funzione e argomenti dalla visualizzazione x a un'altra posizione.

/F
Visualizza le dimensioni dei dati di una funzione.

/D
Visualizza le dimensioni dei dati.

/Un
Ordina la visualizzazione in base all'indirizzo, in ordine crescente.

/Un
Ordina la visualizzazione in base all'indirizzo, in ordine decrescente.

/N
Ordina la visualizzazione in base al nome, in ordine crescente.

/N
Ordina la visualizzazione in base al nome, in ordine decrescente.

/Z
Ordina la visualizzazione in base alle dimensioni, in ordine crescente.

/Z
Ordina la visualizzazione in base alle dimensioni, in ordine decrescente.

Modulo
Specifica il modulo da cercare. Questo modulo può essere un file .exe, .dll o .sys. Il modulo può contenere un'ampia gamma di caratteri jolly e identificatori. Per altre informazioni sulla sintassi, vedere Sintassi con caratteri jolly stringa.

Simbolo
Specifica un modello che il simbolo deve contenere. Il simbolo può contenere un'ampia gamma di caratteri jolly e identificatori. Per altre informazioni sulla sintassi, vedere Sintassi con caratteri jolly stringa.

Poiché questo modello è corrispondente a un simbolo, la corrispondenza non è distinzione tra maiuscole e minuscole e una singola sottolineatura iniziale (_) rappresenta qualsiasi quantità di caratteri di sottolineatura iniziale. È possibile aggiungere spazi all'interno di Symbol, in modo da poter specificare i nomi dei simboli che contengono spazi (ad esempio "operatore nuovo" o "Modello<A, B>") senza usare caratteri jolly.

Ambiente

Elemento Descrizione
Modalità Modalità utente, modalità kernel
Targets Dump live, arresto anomalo
Piattaforme Tutti

Commenti

Il comando seguente trova tutti i simboli in MyModule che contengono la stringa "spin".

0:000> x mymodule!*spin* 

Il comando seguente individua rapidamente i simboli "DownloadMinor" e "DownloadMajor" in MyModule.

0:000> x mymodule!downloadm??or 

È anche possibile visualizzare tutti i simboli in MyModule usando il comando seguente.

0:000> x mymodule!* 

I comandi precedenti forzano anche il debugger a ricaricare le informazioni sui simboli da MyModule. Se si desidera ricaricare i simboli nel modulo con una visualizzazione minima, usare il comando seguente.

0:000> x mymodule!*start* 

Alcuni simboli contengono sempre la stringa "start". Pertanto, il comando precedente visualizza sempre un output per verificare che il comando funzioni. Ma il comando precedente evita la lunghezza eccessiva di visualizzazione di x mymodule!*.

La visualizzazione mostra l'indirizzo iniziale di ogni simbolo e il nome completo del simbolo. Se il simbolo è un nome di funzione, la visualizzazione include anche un elenco dei relativi tipi di argomento. Se il simbolo è una variabile globale, viene visualizzato il relativo valore corrente.

C'è un altro caso speciale del comando x . Per visualizzare gli indirizzi e i nomi di tutte le variabili locali per il contesto corrente, usare il comando seguente.

0:000> x * 

Nota Nella maggior parte dei casi, non è possibile accedere alle variabili locali a meno che non siano stati caricati simboli privati. Per altre informazioni su questa situazione, vedere dbgerr005: Simboli privati obbligatori. Per visualizzare i valori delle variabili locali, usare il comando dv (Visualizza variabili locali).

Nell'esempio seguente vengono illustrate le opzioni /0, /1 e /2 .

0:000:x86> x /0 MyApp!Add*
00b51410          
00b513d0 
      
0:000:x86> x /1 MyApp!Add*
MyApp!AddThreeIntegers
MyApp!AddTwoIntegers

0:000:x86> x /2 MyApp!Add*
00b51410          MyApp!AddThreeIntegers
00b513d0          MyApp!AddTwoIntegers

Le opzioni /0, /1 e /2 sono utili se si vuole usare l'output del comando x come input al comando foreach .

.foreach ( place { x /0 MyApp!*MySym*} ) { .echo ${place}+0x18 }

Nell'esempio seguente viene illustrato l'opzione /f quando viene usata per filtrare le funzioni nel modulo notepad.exe.

0:000> x /f /v notepad!*main*
prv func   00000001`00003340  249 notepad!WinMain (struct HINSTANCE__ *, struct HINSTANCE__ *, char *, int)
prv func   00000001`0000a7b0   1c notepad!WinMainCRTStartup$filt$0 (void)
prv func   00000001`0000a540  268 notepad!WinMainCRTStartup (void)

Quando si usa l'opzione /v , la prima colonna della visualizzazione mostra il tipo di simbolo (locale, globale, parametro, funzione o sconosciuto). La seconda colonna è l'indirizzo del simbolo. La terza colonna è la dimensione del simbolo, in byte. La quarta colonna mostra il nome del modulo e il nome del simbolo. In alcuni casi, questa visualizzazione viene seguita da un segno di uguale (=) e quindi dal tipo di dati del simbolo. Viene visualizzata anche l'origine del simbolo (informazioni sul simbolo pubblico o completo).

kd> x /v nt!CmType*
global 806c9e68    0 nt!CmTypeName = struct _UNICODE_STRING []
global 806c9e68  150 nt!CmTypeName = struct _UNICODE_STRING [42]
global 806c9e68    0 nt!CmTypeName = struct _UNICODE_STRING []
global 805bd7b0    0 nt!CmTypeString = unsigned short *[]
global 805bd7b0   a8 nt!CmTypeString = unsigned short *[42]

Nell'esempio precedente le dimensioni sono specificate in formato esadecimale, mentre il tipo di dati viene specificato in formato decimale. Pertanto, nell'ultima riga dell'esempio precedente, il tipo di dati è una matrice di 42 puntatori a interi brevi senza segno. Le dimensioni di questa matrice sono 42*4 = 168 e 168 vengono visualizzate in formato esadecimale come 0xA8.

È possibile usare l'opzione /sSize per visualizzare solo i simboli le cui dimensioni, in byte, sono un determinato valore. Ad esempio, è possibile limitare il comando nell'esempio precedente ai simboli che rappresentano oggetti le cui dimensioni sono 0xA8.

kd> x /v /s a8 nt!CmType*
global 805bd7b0   a8 nt!CmTypeString = unsigned short *[42]

Uso dei tipi di dati

L'opzione /t causa la visualizzazione delle informazioni sul tipo di dati di ogni simbolo. Si noti che per molti simboli, queste informazioni vengono visualizzate anche senza l'opzione /t . Quando si usa /t, tali simboli hanno le informazioni sul tipo di dati visualizzate due volte.

0:001> x prymes!__n*
00427d84 myModule!__nullstring = 0x00425de8 "(null)"
0042a3c0 myModule!_nstream = 512
Type information missing error for _nh_malloc
004021c1 myModule!MyStructInstance = struct MyStruct
00427d14 myModule!_NLG_Destination = <no type information>

0:001> x /t prymes!__n*
00427d84 char * myModule!__nullstring = 0x00425de8 "(null)"
0042a3c0 int myModule!_nstream = 512
Type information missing error for _nh_malloc
004021c1 struct MyStruct myModule!MyStructInstance = struct MyStruct
00427d14 <NoType> myModule!_NLG_Destination = <no type information>

Il comando x visualizzerà un'istanza di un tipo.

0:001> x foo!MyClassInstance
00f4f354          foo!MyClassInstance = 0x00f78768

Il comando x non visualizza nulla in base al nome di un tipo.

0:001> x foo!MyClass
0:001>

Per visualizzare le informazioni sul tipo usando il nome di un tipo, considerare l'uso di dt (Tipo di visualizzazione) fornisce informazioni per i tipi e le istanze dei tipi:

0:001> dt foo!MyClass
   +0x000 IntMemberVariable : Int4B
   +0x004 FloatMemberVariable : Float
   +0x008 BoolMemberVariable : Bool
   +0x00c PtrMemberVariable : Ptr32 MyClass

Uso dei modelli

È possibile usare i caratteri jolly con il comando x per visualizzare le classi di modello come illustrato in questo esempio.

0:001>  x Fabric!Common::ConfigEntry*TimeSpan?
000007f6`466a2f9c Fabric!Common::ConfigEntry<Common::TimeSpan>::ConfigEntry<Common::TimeSpan> (void)
000007f6`466a3020 Fabric!Common::ConfigEntry<Common::TimeSpan>::~ConfigEntry<Common::TimeSpan> (void)

Prendere in considerazione l'uso del comando dt (Display Type) quando si usano modelli, poiché il comando x non visualizza singoli elementi della classe modello.

0:001> dt foo!Common::ConfigEntry<Common::TimeSpan>
   +0x000 __VFN_table : Ptr64 
   +0x008 componentConfig_ : Ptr64 Common::ComponentConfig
   +0x010 section_         : std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >
   +0x038 key_             : std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >

Vedere anche

Verifica dei simboli

dv (Visualizza variabili locali)