我有两个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*'
答案 0 :(得分:7)
尝试:
bu 0xff3c6100
如果我没记错,WinDbg也允许按地址设置断点。
答案 1 :(得分:4)
你试过“bm myexe!displayerror *”吗?
答案 2 :(得分:3)
bp @@(MyClass :: MyMethod)中断方法(如果相同的方法被重载并因此存在于多个地址上,则非常有用)
答案 3 :(得分:2)
bm myexe!displayerror
这将设置所有重载的断点,而不是使用bc
来清除你不想要的那些
bc 1-3
或者只是禁用它们
bd 1-3
bm
的问题在于它产生的断点有时无法评估并触发中断。有时很讨厌。
答案 4 :(得分:1)
在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一样),它会暂停一段时间在该行设置断点,这假设您可以访问源代码。