2017-09-15 159 views
1

我想使用名为“TSmartPointer :: TSmartPointer”的符号在windbg中插入断点。如何使用符号插入断点包括“<>”(尖括号)

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

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

我用命令x搜索符号,也没有符号的发现:

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

当我更换 “<” 和 “>”,以 “*”,WinDbg中可以找到的符号:

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

我错了吗?我怎样才能插入这个断点?

回答

1

在WinDbg中的内部帮助我找不到这一点,但在Microsoft documentation,这让我不知道一点关于空间以及

要设置复杂的功能断点,包括含有功能空格以及C++公共类的成员,将括号中的表达式括起来。例如,使用bp(?? MyPublic)或bp(运算符new)。

此外,它明确地谈到尖括号

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

(重点煤矿)

所以,你的情况,下面应该工作:

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

引号应该关心的空间为好。

而做出的@Kurt Hutchinson持久的评论:

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

+0

感谢您的耐心等待。我阅读了您通知的Microsoft文档。我尝试使用下面的命令插入断点。 ** bu!!“MSHTML!TSmartPointer :: TSmartPointer ”**。但是WinDbg注意到我无法解决'@!“MSHTML中的错误!TSmartPointer :: TSmartPointer '' ^'bu @!“中的额外字符错误MSHTML!TSmartPointer :: TSmartPointer ''**。 – egodcore

+0

@egodcore:我会回头看看 –

+0

对于模板类,使用Windbg想要的确切间距和角度支架放置非常重要,有时在那里会有一个很大的空间,你可以告诉它什么应该先做一个符号查找,比如'x MSHTML!TSmartPointer * CDataMemberMgr *'。Windbg应该做一个通配符匹配并打印出一串符号名称,然后你应该从该列表中复制并粘贴正确的名称,使用'@!'...''引用,不要试图自己重新输入符号名称,因为空间很重要,如果你错过了,Windbg将无法正确匹配它。 –