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