符號可讓您直接操作正在除錯的程式所使用的記號。 例如,您可以使用指令 bp main 在函數 main 設定岔斷點,或使用指令 dd MyInt L1 顯示整數變數 MyInt。
在許多情況下,符號可以作為偵錯工具命令中的參數使用。 大多數數值參數都支援此功能,某些文字參數也支援此功能。 除了符號語法的一般規則之外,還有適用於每種情況的符號語法規則。
一般符號語法規則
符號名稱由一或多個字元組成,但一律以字母、底線 (_)、問號 (?) 或美元符號 ($) 開頭。
符號名稱可以由模組名稱限定。 感嘆號 (!) 將模組名稱與符號分隔開 (例如, mymodule!main)。 如果未使用模組名稱,則符號仍可加上驚嘆號前置詞。 使用沒有模組名稱的驚嘆號特別有用,即使對於區域變數也是如此,以向偵錯工具命令指出參數是名稱,而不是十六進位數。 例如,變數 fade 將由 dt (顯示類型) 指令讀取為位址,除非它以驚嘆號為前綴或使用 -n 選項。 但是,若要指定符號是本地符號,請在其前面加上美元符號 ( $ ) 和驚嘆號 ( ! ),如 $!lime 所示。
符號名稱完全不區分大小寫。 這表示偵錯工具將無法正確瞭解程式中 myInt 和 MyInt 的存在;任何引用其中一個命令的命令都可以訪問另一個命令,無論命令如何大寫。
數值表達式中的符號語法
偵錯工具會瞭解兩種不同類型的運算式:Microsoft 巨集組合器 (MASM) 運算式和 C++ 運算式。 就符號而言,這兩種形式的語法差異如下:
在MASM運算式中,每個符號都會解譯為位址。 根據符號所指的內容,這將是全域變數、局部變數、函數、區段、模組或任何其他可識別標籤的位址。
在C++表達式中,每個符號都會根據其類型來解譯。 根據符號所指的內容,它可以解釋為整數、資料結構、函數指標或任何其他資料類型。 不對應於 C++ 資料類型 (的符號,例如未修改的模組名稱) 會導致語法錯誤。
如需何時以及如何使用每種語法類型的說明,請參閱 評估運算式。
如果您使用 MASM 運算式語法,則任何可以解釋為十六進位數或暫存器(例如 BadFeed、 ebX)的符號都應始終以驚嘆號為前綴。 這可確保偵錯工具將它辨識為符號。
ss (設定符號後綴) 指令可用於設定符號後綴。 這會指示偵錯工具自動將 「A」 或 「W」 附加至任何無法找到的符號名稱。
許多 Win32 常式同時存在於 ASCII 和 Unicode 版本中。 這些例式通常分別在其名稱末尾附加一個“A”或“W”。 使用符號尾碼可協助偵錯工具搜尋這些符號。
字尾比對預設為非作用中。
文字表達式中的符號語法
符號可用於某些指令的文字參數中,例如 bm (設定中斷點) 和 x (檢查符號)。
這些文字參數支援各種萬用字元和說明元。 如需詳細資訊,請參閱 字串萬用字元語法 。 除了標準字串萬用字元之外,用來指定符號的文字運算式也可以加上前導底線。 當將此符號用於匹配時,偵錯工具會將其視為任意數量的底線,包括零。
比對文字運算式中的符號時,不會使用符號尾碼。