如何在WinDbg中为operator new / operator delete设置模块断点(bu)?

时间:2012-12-27 16:32:17

标签: windbg

这是我的问题:

0:001> x xerces_depdom_2_8!xercesc_2_8::DOMStringHandle::operator*
00000000`06645e10 xerces_depdom_2_8!xercesc_2_8::DOMStringHandle::operator delete (void *)
00000000`06645be0 xerces_depdom_2_8!xercesc_2_8::DOMStringHandle::operator new (unsigned int)
0:001> bu "xerces_depdom_2_8!xercesc_2_8::DOMStringHandle::operator delete"
0:001> bu "xerces_depdom_2_8!xercesc_2_8::DOMStringHandle::operator new"
breakpoint 0 redefined
0:001> bu xerces_depdom_2_8!xercesc_2_8::DOMStringHandle::operator delete
Couldn't resolve error at 'xerces_depdom_2_8!xercesc_2_8::DOMStringHandle::operator delete'
0:001> bu xerces_depdom_2_8!xercesc_2_8::DOMStringHandle::operator\ delete
Couldn't resolve error at 'xerces_depdom_2_8!xercesc_2_8::DOMStringHandle::operator\ delete'

首先我尝试引用函数名称。没有骰子 - 尝试在operator new上设置断点会移除operator delete上的断点。意思是,断点设置不正确。

不带引号的尝试也不起作用。

那么,我该怎么办?

修改

我想使用bu而不是bp是有原因的。断点在脚本中设置。使用断点的实际地址不是一个好主意,因为它们可能会在运行之间发生变化,这与函数名称不同。此外,bu允许在加载相应模块之前设置断点,这与bp。

不同

所以,让我澄清一下这个问题 - 在加载各个模块之前设置断点。

2 个答案:

答案 0 :(得分:1)

如果您要使用的符号名称中有空格,则需要使用大括号:

bu (blah!operator new)

请参阅link,特别是使用复杂文本的断点

部分

答案 1 :(得分:0)

另一种选择是使用bu @!"blah!operator new",这样做的好处是可以引用模板方法中经常使用的'<''>'个字符。 EdChum的回答链接中也提到了这一点。