共用方式為


x (檢查符號)

x 命令會在符合指定模式的所有內容中顯示符號。

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

參數

選項 指定符號搜尋選項。 您可以使用下列一或多個選項:

/0
只顯示每個符號的位址。

/1
只顯示每個符號的名稱。

/2
只顯示每個符號的位址和名稱(不是數據類型)。

/D
使用 調試程式標記語言顯示輸出。

/t
如果已知數據類型,則顯示每個符號的數據類型。

/v
顯示每個符號的符號類型(本機、全域、參數、函式或未知)。 這個選項也會顯示每個符號的大小。 函式符號的大小是記憶體中的函式大小。 其他符號的大小是符號所代表之數據類型的大小。 大小一律以位元組為單位來測量,並以十六進位格式顯示。

/s 大小
只顯示大小等於 Size 值的符號,以位元組為單位。 式符號的大小是記憶體中的函式大小。 其他符號的大小是符號所代表數據類型的大小。 無法判斷其大小一律會顯示的符號。 Size 必須是非零整數。

/q
以引號格式顯示符號名稱。

/p
當調試程序顯示函式名稱和其自變數時,省略左括號之前的空格。 如果您將函式名稱和自變數從 x 顯示器複製到另一個位置,這種顯示可能會更容易。

/f
顯示函式的數據大小。

/d
顯示數據的數據大小。

/一個
以遞增順序依位址排序顯示。

/一個
依位址排序顯示,依遞減順序排序。

/n
依名稱排序顯示,依遞增順序排序。

/N
依名稱排序顯示,依遞減順序排序。

/z
依大小排序顯示,以遞增順序排序。

/Z
依大小排序顯示,依遞減順序排序。

模組
指定要搜尋的模組。 此模組可以是.exe、.dll或.sys檔案。 模組 可以包含各種通配符和規範。 如需語法的詳細資訊,請參閱 字串通配符語法

象徵
指定符號必須包含的模式。 符號 可以包含各種通配符和規範。 如需語法的詳細資訊,請參閱 字串通配符語法

因為此模式會比對符號,因此比對不區分大小寫,而單一前置底線 (_) 代表任何前置底線數量。 您可以在 Symbol新增空格,以便指定包含空格的符號名稱(例如 “operator new” 或 “Template<A, B>”),而不使用通配符。

Environment

項目 說明
模式 使用者模式、核心模式
目標 即時、損毀傾印
平台 全部

備註

下列命令會在 MyModule 中尋找包含字串 「spin」 的所有符號。

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 命令的特殊案例。 若要顯示目前內容之所有局部變數的位址和名稱,請使用下列命令。

0:000> x * 

注意 在大部分情況下,除非已載入私人符號,否則您無法存取局部變數。 如需這種情況的詳細資訊,請參閱 dbgerr005:需要私人符號。 若要顯示局部變數的值,請使用 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 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 選項時,顯示的第一個數據行會顯示符號類型(local、global、parameter、function 或 unknown)。 第二個數據行是符號的位址。 第三個數據行是符號的大小,以位元組為單位。 第四個數據行會顯示模組名稱和符號名稱。 在某些情況下,此顯示後面接著等號 (=),然後是符號的數據類型。 也會顯示符號的來源(公用或完整符號資訊)。

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]

在上述範例中,大小是以十六進位格式來指定,而數據類型則以十進位格式指定。 因此,在上述範例的最後一行中,數據類型是42個不帶正負號短整數指標的陣列。 此陣列的大小為42*4 = 168,而168會以十六進位格式顯示為 0xA8。

您可以使用 /sSize 選項,只顯示大小為位元組的符號是特定值。 例如,您可以將上述範例中的 命令限制為代表其大小為0xA8物件的符號。

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

使用數據類型

/t 選項會讓調試程序顯示每個符號數據類型的相關信息。 請注意,對於許多符號,即使沒有 /t 選項,也會顯示此資訊。 當您使用 /t 時,這類符號的數據類型資訊會顯示兩次。

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 (顯示局部變數)