[英]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.