x (シンボルの検証)

x コマンド は、指定したパターンに一致するすべてのコンテキストのシンボルを表示します。

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

パラメーター

オプション
シンボル検索オプションを指定します。 次のオプションを 1 つ以上使用できます。

/0
各シンボルのアドレスのみを表示します。

/1
各シンボルの名前のみを表示します。

/2
(データ型ではなく) 各シンボルのアドレスと名前のみを表示します。

/D
デバッガー マークアップ言語を使用 して出力を表示します

/t
データ型が既知の場合は、各シンボルのデータ型を表示します。

/v
各シンボルのシンボルの種類 (ローカル、グローバル、パラメーター、関数、または不明) を表示します。 このオプションでは、各シンボルのサイズも表示されます。 関数シンボルのサイズは、メモリ内の関数のサイズです。 他のシンボルのサイズは、シンボルが表すデータ型のサイズです。 サイズは常にバイト単位で測定され、16 進形式で表示されます。

/sSize
Size の値と等しいサイズ (バイト単位) のシンボルのみを表示 します。 関数 シンボル のサイズは、メモリ内の関数のサイズです。 他 シンボルのサイズは、シンボルが表すデータ型のサイズです。 サイズを決定できないシンボルは常に表示されます。 Size は 0 以外の整数である必要があります。

/q
引用符で囲まれた形式でシンボル名を表示します。

/p
デバッガーが関数名とその引数を表示するときに、開始かっこの前のスペースを省略します。 この種の表示は、関数名と引数を x ディスプレイから別の場所にコピーする場合に簡単になります。

/f
関数のデータ サイズを表示します。

/d
データのデータ サイズを表示します。

/a
表示を住所で昇順に並べ替えます。

/A
表示をアドレスで降順に並べ替える。

/n
表示を名前で昇順に並べ替えます。

/N
表示を名前で降順に並べ替える。

/z
表示をサイズ順に昇順に並べ替えます。

/Z
表示をサイズ順に降順に並べ替える。

モジュール
検索するモジュールを指定します。 このモジュールは、.exe、.dll、または.sysできます。 モジュール には、さまざまなワイルドカード文字と指定子を含めることができます。 構文の詳細については、「文字列ワイルドカード構文 」を参照してください

シンボル
シンボルに含まれる必要があるパターンを指定します。 シンボル には、さまざまなワイルドカード文字と指定子を含めることができます。 構文の詳細については、「文字列ワイルドカード構文 」を参照してください

このパターンはシンボルと一致します。一致では大文字と小文字が区別されません。先頭のアンダースコア (_) は先頭のアンダースコアの数量を表します。 Symbol 内にスペースを追加すると、ワイルドカード文字を使用せずにスペース ("operator new" や "TemplateA<, B>" など) を含むシンボル名を指定できます。

環境

モード

ユーザー モード、カーネル モード

対象サーバー

ライブ、クラッシュ ダンプ

プラットフォーム

All

解説

次のコマンドは、文字列 "spin" を含む MyModule 内のすべてのシンボルを検索します。

0:000> x mymodule!*spin* 

次のコマンドは、MyModule の "DownloadMinor" シンボルと "DownloadMajor" シンボルをすばやく検索します。

0:000> x mymodule!downloadm??or 

次のコマンドを使用して、MyModule 内のすべてのシンボルを表示することもできます。

0:000> x mymodule!* 

また、前のコマンドでは、デバッガーは MyModule からシンボル情報を強制的に再読み込みします。 最小限の表示でモジュール内のシンボルを再読み込みする場合は、次のコマンドを使用します。

0:000> x mymodule!*start* 

いくつかのシンボルには、常に "start" という文字列が含まれます。 したがって、前のコマンドでは、コマンドが機能する場合は常にいくつかの出力が表示されます。 ただし、上記のコマンドは、 x mymodule!* の過度な表示長を回避します

表示には、各シンボルの開始アドレスと完全なシンボル名が表示されます。 シンボルが関数名の場合、表示には引数の型の一覧も含まれます。 シンボルがグローバル変数の場合、その現在の値が表示されます。

x コマンドのもう 1 つの特殊な ケース があります。 現在のコンテキストのすべてのローカル変数のアドレスと名前を表示するには、次のコマンドを使用します。

0:000> x * 

メモ ほとんどの場合、プライベート シンボルが読み込まれない限り、ローカル変数にアクセスできません。 この状況の詳細については、「 dbgerr005: Private Symbols Required」を参照してください。 ローカル変数の値を表示するには、 dv (ローカル変数の表示) コマンドを使用 します。

次の例は、/0、/1、/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

/0、/1、/2 のオプションは、x コマンドの出力を .foreach コマンドへの入力として使用する場合に便利です。

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

次の例では、 スイッチ /f を使用してモジュール の関数をフィルター処理する方法を示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)

/v オプションを 使用すると 、表示の最初の列にシンボルの種類 (ローカル、グローバル、パラメーター、関数、または不明) が表示されます。 2 番目の列はシンボルのアドレスです。 3 番目の列は、シンボルのサイズ (バイト単位) です。 4 番目の列には、モジュール名とシンボル名が表示されます。 場合によっては、この表示の後に等号 (=) が続き、その後にシンボルのデータ型が続く場合があります。 シンボルのソース (パブリックまたは完全なシンボル情報) も表示されます。

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]

前の例では、サイズは 16 進数形式で指定し、データ型は 10 進形式で指定されています。 したがって、前の例の最後の行では、データ型は符号なし短整数への 42 ポインターの配列です。 この配列のサイズは 42*4 = 168 で、168 は 168 の形式で 168 0xA8。

/sSize オプションを使用すると、サイズ (バイト単位) が特定の値であるシンボルのみを表示できます。 たとえば、前の例のコマンドを、サイズが0xA8 のオブジェクトを表すシンボルに制限することができます。

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

データ型の操作

/Tオプションを指定すると、デバッガーは各シンボルのデータ型に関する情報を表示します。 多くの記号については、この情報は /t オプションなしでも表示されることに注意してください。 /Tを使用すると、このような記号のデータ型情報が2回表示されます。

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>

X コマンドは、型のインスタンスを表示します。

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

X コマンドでは、型の名前のみに基づいて何も表示されません。

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

型の名前を使用して型情報を表示するには、 dt (表示型)の使用を検討してください。型の型とインスタンスの両方についての情報が提供されます。

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

テンプレートの操作

このサンプルで示すように、ワイルドカードと x コマンドを使用して、テンプレートクラスを表示できます。

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)

テンプレートを操作するときは、[ dt (Display Type) ] コマンドを使用することを検討してください。 x コマンドでは、個々のテンプレートクラス項目が表示されません。

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

関連項目

シンボルの検証

dv (ローカル変数の表示)