如何使用符号插入断点包括“<>” (尖括号)

时间:2017-09-15 09:14:10

标签: windbg

我想在windbg中插入一个断点,使用名为“TSmartPointer :: TSmartPointer”的符号。

bp TSmartPointer<class CDataMemberMgr>::TSmartPointer<class CDataMemberMgr>

WinDbg注意到我没有找到任何符号。

我使用命令x来搜索符号,但也找不到符号:

x TSmartPointer<class CDataMemberMgr>::TSmartPointer<class CDataMemberMgr>

当我更换“&lt;”和“&gt;”到“*”,WinDbg可以找到符号:

x TSmartPointer*class CDataMemberMgr*::TSmartPointer*class CDataMemberMgr*

我错了吗?如何插入此断点?

1 个答案:

答案 0 :(得分:1)

我在WinDbg的内部帮助中找不到这个,但在Microsoft documentation中,这让我对空格有点疑惑

  

要在复杂函数上设置断点,包括包含空格的函数,以及C ++公共类的成员,请将表达式括在括号中。例如,使用bp(?? MyPublic)或bp(operator new)。

此外,它明确谈到尖括号

  

您必须以@!“三个符号开头,并以引号(”)结束。如果没有此语法,则不能在MASM评估程序中的符号名称中使用空格,尖括号(&lt;,&gt;)或其他特殊字符。

(强调我的)

因此,在您的情况下,以下内容应该有效:

bp @!"TSmartPointer<class CDataMemberMgr>::TSmartPointer<class CDataMemberMgr>"

引号也应该关注空格。

并对@ Kurt Hutchinson持久性发表评论:

  

对于模板类,使用Windbg想要的精确间距和尖括号位置非常重要。有时在那里会有一个额外的空间是重要的。您可以通过首先进行符号查找来判断它应该是什么,例如x MSHTML!TSmartPointer * CDataMemberMgr *。 Windbg应该进行通配符匹配并打印出一堆符号名称。然后,您应该使用@!“...”引用从该列表中复制并粘贴正确的名称。不要尝试自己重新键入符号名称,因为空格很重要,如果你错过了一个,Windbg将无法正确匹配。