簡體   English   中英

Windbg:如何在C ++函數的一個重載上設置斷點?

[英]Windbg: How to set breakpoint on one of the overloads of a C++ function?

我有一個c ++函數的兩個重載,我想在其中一個上設置一個斷點:

0:000> bu myexe!displayerror
Matched: 00000000`ff3c6100 myexe!displayError (int, HRESULT, wchar_t *)
Matched: 00000000`ff3c60d0 myexe!displayError (int, HRESULT)
Ambiguous symbol error at 'myexe!displayerror'

哎呀我可以在所有重載上設置斷點,但似乎無法弄清楚如何:

0:000> bu myexe!displayerror*
Matched: 00000000`ff3c6100 myexe!displayError (int, HRESULT, wchar_t *)
Matched: 00000000`ff3c60d0 myexe!displayError (int, HRESULT)
Ambiguous symbol error at 'myexe!displayerror*'

嘗試:

bu 0xff3c6100

如果我沒記錯的話,WinDbg也允許按地址設置斷點。

你試過“bm myexe!displayerror *”嗎?

bp @@(MyClass :: MyMethod)打破方法(如果相同的方法被重載並因此出現在多個地址上,則非常有用)

bm myexe!displayerror

這將設置所有重載的斷點,而不是使用bc來清除你不想要的那些

bc 1-3

或者只是禁用它們

bd 1-3

bm的問題在於它產生的斷點有時無法評估並觸發中斷。 有時很煩人。

搜索您的dll以查找與您的符號匹配的所有入口點

x myexe!displayerror

這將輸出與搜索字符串及其入口點匹配的所有符號,然后在地址上設置斷點

bp ff3c6100 // for myexe!displayError (int, HRESULT, wchar_t *)

這將在命中該地址時設置特定斷點,或者將bp設置為另一個地址。 您可以將斷點設置為只觸發一次,清除斷點並退出

bp /1 ff3c6100

您還可以執行諸如轉儲調用堆棧,變量和繼續之類的命令:

bp ff3c6100 "kb;dv;g"

您也可以在連接WinDbg時打開源代碼,導航到要設置斷點的代碼行並按F9(與使用Visual Studio一樣),在設置斷點之前會暫停一段時間在該行,這假設您可以訪問源代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM