2017-09-15 35 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將無法正確匹配它。 –