WinDbgの一般的に使用されるコマンドは---シンボルXシリーズをご確認ください

X(シンボルを調べます)

指定されたパターンに一致するすべてのコンテキストでのxコマンド表示記号。

X [オプション]モジュール!シンボル
X [オプション] *

パラメータ:

  • オプション
    特定のシンボルの検索オプション。:次のオプションの1つまたは複数使用することができます
    / 0を
    各シンボルのアドレスのみを表示します。

    / 2
    ディスプレイ各シンボルの名前だけ。

    / 2
    だけを示し、各シンボル(よりむしろデータ型)アドレスと名前。

    / D
    用いデバッガマークアップ言語表示出力を。

    / Tの
    データ型がわかっている場合、各シンボルのデータタイプが表示されています。

    / Vの
    シンボルタイプ(ローカル、グローバル、パラメータ、機能、または未知)の各記号の表示。このオプションは、各シンボルのサイズを表示します。シンボルサイズ機能は、メモリサイズの関数です。他の記号は、データタイプのサイズはシンボルの大きさを示しています。バイト単位のサイズを測定し、16進形式で表示することは常にあります。

    / sの サイズ
    (バイト単位)のみの表示サイズが等しいサイズシンボル値。関数シンボルのサイズは、メモリ機能の大きさです。他のシンボルのサイズデータ型はシンボルの大きさを示しています。常にシンボルサイズを決定することはできませんが表示されます。サイズはゼロ以外の整数でなければなりません。

    / Q
    フォーマット引用されたシンボルを示します。

    / P
    デバッガが左括弧の前にスペースを入れずに、機能とそのパラメータの名前が表示されます。あなたは、関数名と引数たい場合は、X別の場所ディスプレイにコピーし、このタイプのディスプレイを簡略化することができます。

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

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

    /
    昇順で表示されたアドレスによります。

    / Aは、
    アドレスを降順にソート。

    / nの
    昇順に名前によって表示順序。

    / Nは、
    ディスプレイの降順に名前でソート。

    / zの
    昇順で押して表示サイズ。

    / Z
    順序表示を降順でサイズによって。

  • モジュールは、
    検索モジュールを指定します。このモジュールは、EXE、DLL、またはSYSファイルすることができます。モジュールは、野生生物の機能と仕様の多様性を含んでいてもよいです。
  • シンボルは
    シンボルが含まれていなければならないモードを指定します。記号はワイルドカードと指定子の様々なを含めることができます。このシンボルパターンマッチング、したがって、大文字と小文字を区別しないマッチング、および単一のプリアンブル(U)を強調しているので先頭下線の任意の数を表します。あなたは、スペースが含まれているシンボル名を割り当てることができるように、シンボル空間に添加することができる(例えば、「new演算子」または「テンプレート<A、B>」 )、 ワイルドカードを使用せず。

環境:

モード

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

目標

リアルタイムのクラッシュダンプ

プラットフォーム

完成

MyModuleというのでしょう以下のコマンドは、文字列「が含まれているspinすべての記号を」。

0:000> x mymodule!*spin* 

次のコマンドを実行すると、すぐに「DownloadMinor」と「DownloadMajor」のシンボルでMyModuleというを見つけます。

0:000> x mymodule!downloadm??or 

あなたはまた、MyModuleというのすべてのシンボルを表示するには、次のコマンドを使用することができます。

0:000> x mymodule!* 

上記のコマンドは、MyModuleというにおけるデバッガのシンボル情報過多を強制します。あなたはシンボル最小表示オーバーロードされたモジュールを使用する場合は、次のコマンドを使用します。

0:000> x mymodule!*start* 

いくつかのシンボルは、常に「スタート」の文字列が含まれています。そのため、直前のコマンドは常にコマンドが正常に動作していることを確認するために、出力の一部が表示されます。しかし、表示順序の前での過度の長避けるために*!X-MyModuleというの

アドレスとシンボルの各シンボルのフルネームを表示開始。関数のシンボル名場合、ディスプレイは、さらに、そのパラメータの型のリストを含みます。シンボルはグローバル変数である場合は、その現在の値が表示されます。

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

0:000> x * 

なお    、それはプライベートなシンボルをロードされている、またはローカル変数にアクセスすることができない場合を除き、ほとんどの場合、。 ローカル変数の値を表示するには、使用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

あなたが使用している場合、Xのように、コマンドの出力をするforeach、入力コマンド/ 0 / 1および/ 2便利です。

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

次の例では、スクリーニング機能モジュールメモ帳で使用されるスイッチを示し/ Fを

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符号なしshortを指すポインタの配列です。この配列のサイズは、168は16進形式0xA8で表示され、* 4 = 168 42です。

あなたは使用することができます/ Sの サイズの特定のシンボルの値(バイト単位)サイズだけを表示するオプションを。例えば、上記の例では、コマンドは0xA8オブジェクトによって表されるシンボルの大きさに制限されてもよいです。

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

データ型の使用

/ 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コマンドを含むワイルドカードを使用することができます。

dbgcmd
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(表示タイプ) 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> >

おすすめ

転載: www.cnblogs.com/yilang/p/11574532.html