WinDbg 和其他 Windows 調試程式中的條件斷點
只有在滿足特定條件時,WinDbg 和其他 Windows 調試程式中的條件斷點才適合使用。
使用 bp (設定斷點) 或其他斷點命令的 “/w” 參數建立條件斷點。 命令的基本語法為:
0:000> bp /w "(Condition)" Address
斷點只會在指定的條件為 true 時造成調試程式中斷。 “w” 是 “when” 的縮寫。 條件表達式可以是任何可以搭配 dx (Display Debugger Object Model Expression) 命令使用的任何專案。 這包括大部分的 C++ 樣式運算式,包括比較、算術、指標運算等等。 例如,只有在變數超過 20 時才會中斷的基本條件斷點,可以寫入為:
0:000> bp /w "MyVar > 20" `mysource.cpp:143`
由於條件是使用調試程序物件模型進行評估,因此您也可以利用 NatVis 支援之類的專案。 例如,假設 myVec 是 std::vector<int>
,您可以建立條件,例如:
0:000> bp /w "myVec.Count() == 4" `mysource.cpp:143`
當 myVec 變數有 4 個專案時,執行第 143 行mysource.cpp時,這會中斷。
除了 natvis 之外,您也可以叫用 JavaScript 函式。 如果您使用 WinDbg 腳本視窗或 .scriptload (載入腳本) 命令載入腳本,其中包含名為 “myFunc” 的函式,您可以設定如下的斷點:
0:000> bp /w "@$scriptContents.myFunc()" `mysource.cpp:143`
如需在調試程式中撰寫 JavaScript 函式和延伸模組的詳細資訊,請參閱 JavaScript 調試程式腳本
雖然較高層級的表達式通常最有用,但也可以使用這些表達式來評估緩存器。 例如,您可以建立斷點,只在堆疊指標達到一些臨界值時觸發:
0:000> bp /w "@esp < 0x6ff9f8" `mysource.cpp:143`
舊版條件斷點語法
在斷點命令的 「/w」 參數可用性之前,設定條件斷點的建議方式是使用 j (Execute If - Else) 命令或 .if token,後面接著 gc (Go from Conditional Breakpoint) 命令。 雖然不再建議使用這些設定條件斷點的方法,但它們仍可運作,而且您可能會看到其他來源所參考的這個語法。
使用 j 命令的條件斷點基本語法如下:
0:000> bp Address "j (Condition) 'OptionalCommands'; 'gc' "
使用 .if Token 的條件斷點的基本語法如下:
0:000> bp Address ".if (Condition) {OptionalCommands} .else {gc}"
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應