Share via


符號語法和符號比對

符號可讓您直接操作正在偵錯之程式所使用的權杖。 例如,您可以使用命令 bp main在函式main設定中斷點,或使用dd MyInt L1命令顯示整數變數MyInt

在許多情況下,符號可以當做偵錯工具命令中的參數使用。 這支援大部分數值參數,而且在某些文字參數中也受到支援。 除了符號語法的一般規則之外,也會在每個案例中套用符號語法規則。

一般符號語法規則

符號名稱包含一或多個字元,但一律以字母、底線 (_) 、問號 () 或貨幣符號 ($) 開頭。

符號名稱可由模組名稱限定。 驚嘆號 (!) 會分隔模組名稱與符號 (,例如 mymodule!main) 。 如果未使用模組名稱,符號仍然可以加上驚嘆號。 使用不含模組名稱的驚嘆號特別有用,即使是區域變數,也能向偵錯工具命令指出參數是名稱,而不是十六進位數位。 例如,變數 化將會由 dt (Display Type) 命令讀取為位址,除非其前面加上驚嘆號或 -n 選項。 不過,若要指定符號是區域符號,請在符號前面加上貨幣符號 ( $ ) 和驚嘆號 ( !) ,如 $!lime

符號名稱完全不區分大小寫。 這表示偵錯工具無法正確瞭解程式中的 myIntMyInt ;任何參考其中一個命令的命令都可以存取另一個命令,不論命令的大小寫為何。

數值運算式中的符號語法

偵錯工具瞭解兩種不同的運算式:Microsoft Macro Assembler (MASM) 運算式和 C++ 運算式。 就符號而言,這兩種形式的語法不同,如下所示:

  • 在 MASM 運算式中,每個符號都會解譯為位址。 根據符號所參考的內容,這會是全域變數、區域變數、函式、區段、模組或任何其他已辨識標籤的位址。

  • 在 C++ 運算式中,每個符號都會根據其類型來解譯。 根據符號所參考的內容,它可能會解譯為整數、資料結構、函式指標或任何其他資料類型。 未對應至 C++ 資料類型的符號 (,例如未修改的模組名稱) 會導致語法錯誤。

如需何時及如何使用每種語法類型的說明,請參閱 評估運算式

如果您使用 MASM 運算式語法,任何可解譯為十六進位數位的符號或暫存器 (例如 BadFeedebX) ,應該一律加上驚嘆號。 這可確保偵錯工具會將它辨識為符號。

ss (Set Symbol Suffix) 命令可用來設定符號尾碼。 這會指示偵錯工具自動將 「A」 或 「W」 附加至找不到的任何符號名稱。

許多 Win32 常式同時存在於 ASCII 和 Unicode 版本中。 這些常式通常會分別將 「A」 或 「W」 附加至其名稱的結尾。 使用符號尾碼可協助偵錯工具搜尋這些符號。

尾碼比對預設不是使用中。

文字運算式中的符號語法

符號可用於某些命令的文字參數中,例如 bm (Set Breakpoint) x (Examine Symbols)

這些文字參數支援各種萬用字元和規範。 如需詳細資訊,請參閱 字串萬用字元語法 。 除了標準字串萬用字元之外,用來指定符號的文字運算式可以加上前置底線。 將此與符號比對時,偵錯工具會將此值視為任何數量的底線,甚至是零。

比對文字運算式中的符號時,不會使用符號尾碼。