x (Symbole untersuchen)

Der Befehl x zeigt die Symbole in allen Kontexten an, die dem angegebenen Muster entsprechen.

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

Parameter

Optionen Gibt Optionen für die Symbolsuche an. Sie können eine oder mehrere der folgenden Optionen verwenden:

/0
Zeigt nur die Adresse der einzelnen Symbole an.

/1
Zeigt nur den Namen der einzelnen Symbole an.

/2
Zeigt nur die Adresse und den Namen der einzelnen Symbole an (nicht den Datentyp).

/D
Zeigt die Ausgabe mithilfe der Debugger-Markupsprache an.

/t
Zeigt den Datentyp jedes Symbols an, wenn der Datentyp bekannt ist.

/V
Zeigt den Symboltyp (lokal, global, Parameter, Funktion oder unbekannt) jedes Symbols an. Diese Option zeigt auch die Größe der einzelnen Symbole an. Die Größe eines Funktionssymbols entspricht der Größe der Funktion im Arbeitsspeicher. Die Größe anderer Symbole entspricht der Größe des Datentyps, den das Symbol darstellt. Die Größe wird immer in Bytes gemessen und im Hexadezimalformat angezeigt.

/sGröße
Zeigt nur die Symbole an, deren Größe in Bytes dem Wert von Size entspricht. Die Größe eines Funktionssymbols ist die Größe der Funktion im Arbeitsspeicher. Die Größe anderer Symbole ist die Größe des Datentyps, den das Symbol darstellt. Symbole, deren Größe nicht bestimmt werden kann, werden immer angezeigt. Die Größe muss eine ganze Zahl ungleich Null sein.

/Q
Zeigt Symbolnamen in Anführungszeichen an.

/p
Das Leerzeichen vor der öffnenden Klammer wird weggelassen, wenn der Debugger einen Funktionsnamen und seine Argumente anzeigt. Diese Art der Anzeige kann es einfacher machen, wenn Sie Funktionsnamen und Argumente aus der x-Anzeige an eine andere Position kopieren.

/f
Zeigt die Datengröße einer Funktion an.

/d
Zeigt die Datengröße der Daten an.

/Eine
Sortiert die Anzeige nach Adresse in aufsteigender Reihenfolge.

/Eine
Sortiert die Anzeige nach Adresse in absteigender Reihenfolge.

/n
Sortiert die Anzeige nach Name in aufsteigender Reihenfolge.

/N
Sortiert die Anzeige nach Name in absteigender Reihenfolge.

/Z
Sortiert die Anzeige nach Größe in aufsteigender Reihenfolge.

/Z
Sortiert die Anzeige nach Größe in absteigender Reihenfolge.

Modul
Gibt das zu durchsuchende Modul an. Dieses Modul kann eine .exe-, .dll- oder .sys-Datei sein. Das Modul kann eine Vielzahl von Wildcardzeichen und Spezifizierern enthalten. Weitere Informationen zur Syntax finden Sie unter Zeichenfolgenplatzhaltersyntax.

Symbol
Gibt ein Muster an, das das Symbol enthalten muss. Das Symbol kann eine Vielzahl von Wildcardzeichen und Spezifizierern enthalten. Weitere Informationen zur Syntax finden Sie unter Zeichenfolgenplatzhaltersyntax.

Da dieses Muster mit einem Symbol übereinstimmt, wird bei der Übereinstimmung die Groß-/Kleinschreibung nicht beachtet, und ein einzelner führender Unterstrich (_) stellt eine beliebige Menge führender Unterstriche dar. Sie können Leerzeichen innerhalb von Symbol hinzufügen, sodass Sie Symbolnamen angeben können, die Leerzeichen enthalten (z. B. "Operator neu" oder "Vorlage<A, B>"), ohne Platzhalterzeichen zu verwenden.

Environment

Element BESCHREIBUNG
Modi Benutzermodus, Kernelmodus
Targets Liveabbild, Absturzabbild
Plattformen All

Hinweise

Der folgende Befehl sucht alle Symbole in MyModule, die die Zeichenfolge "spin" enthalten.

0:000> x mymodule!*spin* 

Der folgende Befehl sucht schnell nach den Symbolen "DownloadMinor" und "DownloadMajor" in MyModule.

0:000> x mymodule!downloadm??or 

Sie können auch alle Symbole in MyModule anzeigen, indem Sie den folgenden Befehl verwenden.

0:000> x mymodule!* 

Die obigen Befehle erzwingen auch, dass der Debugger Symbolinformationen aus MyModule neu lädt. Wenn Sie die Symbole im Modul mit einer minimalen Anzeige erneut laden möchten, verwenden Sie den folgenden Befehl.

0:000> x mymodule!*start* 

Einige Symbole enthalten immer die Zeichenfolge "start". Daher zeigt der vorherige Befehl immer eine Ausgabe an, um zu überprüfen, ob der Befehl funktioniert. Der obige Befehl vermeidet jedoch die übermäßige Anzeigelänge von x mymodule!*.

Die Anzeige zeigt die Startadresse jedes Symbols und den vollständigen Symbolnamen an. Wenn das Symbol ein Funktionsname ist, enthält die Anzeige auch eine Liste der Argumenttypen. Wenn das Symbol eine globale Variable ist, wird sein aktueller Wert angezeigt.

Es gibt einen weiteren Sonderfall des x-Befehls . Verwenden Sie den folgenden Befehl, um die Adressen und Namen aller lokalen Variablen für den aktuellen Kontext anzuzeigen.

0:000> x * 

Hinweis In den meisten Fällen können Sie nicht auf lokale Variablen zugreifen, es sei denn, private Symbole wurden geladen. Weitere Informationen zu dieser Situation finden Sie unter dbgerr005: Private Symbole erforderlich. Verwenden Sie zum Anzeigen der Werte lokaler Variablen den Befehl dv (Lokale Variablen anzeigen).

Im folgenden Beispiel werden die Optionen /0, /1 und /2 veranschaulicht.

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

Die Optionen /0, /1 und /2 sind nützlich, wenn Sie die Ausgabe des x-Befehls als Eingabe für den Foreach-Befehl verwenden möchten.

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

Im folgenden Beispiel wird der Schalter /f veranschaulicht, wenn er zum Filtern von Funktionen im Modul notepad.exe verwendet wird.

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)

Wenn Sie die Option /v verwenden, wird in der ersten Spalte der Anzeige der Symboltyp (lokal, global, Parameter, Funktion oder unbekannt) angezeigt. Die zweite Spalte ist die Adresse des Symbols. Die dritte Spalte ist die Größe des Symbols in Bytes. In der vierten Spalte werden der Modulname und der Symbolname angezeigt. In einigen Fällen folgt auf diese Anzeige ein Gleichheitszeichen (=) und dann der Datentyp des Symbols. Die Quelle des Symbols (öffentliche oder vollständige Symbolinformationen) wird ebenfalls angezeigt.

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]

Im vorherigen Beispiel wird die Größe im Hexadezimalformat angegeben, während der Datentyp im Dezimalformat angegeben wird. Daher ist der Datentyp in der letzten Zeile des vorherigen Beispiels ein Array von 42 Zeigern auf ganzzahlige Ganzzahlen ohne Vorzeichen. Die Größe dieses Arrays beträgt 42*4 = 168, und 168 wird im Hexadezimalformat als 0xA8 angezeigt.

Sie können die Option /sGröße verwenden, um nur die Symbole anzuzeigen, deren Größe in Bytes ein bestimmter Wert ist. Beispielsweise können Sie den Befehl im vorherigen Beispiel auf Symbole beschränken, die Objekte darstellen, deren Größe 0xA8 ist.

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

Arbeiten mit Datentypen

Die Option /t bewirkt, dass der Debugger Informationen zum Datentyp jedes Symbols anzeigt. Beachten Sie, dass diese Informationen für viele Symbole auch ohne die Option /t angezeigt werden. Wenn Sie /t verwenden, werden die Datentypinformationen für solche Symbole zweimal angezeigt.

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>

Der Befehl x zeigt eine instance eines Typs an.

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

Der Befehl x zeigt nichts nur basierend auf dem Namen eines Typs an.

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

Wenn Sie Typinformationen mithilfe des Namens eines Typs anzeigen möchten, sollten Sie dt (Anzeigetyp) verwenden. Es werden Informationen für Typen und Instanzen von Typen bereitgestellt:

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

Arbeiten mit Vorlagen

Sie können Mit dem Befehl x Wildcards verwenden, um Vorlagenklassen anzuzeigen, wie in diesem Beispiel gezeigt.

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)

Erwägen Sie die Verwendung des Befehls dt (Anzeigetyp), wenn Sie mit Vorlagen arbeiten, da der Befehl x keine einzelnen Vorlagenklassenelemente anzeigt.

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> >

Siehe auch

Überprüfen von Symbolen

dv (Lokale Variablen anzeigen)