2012-02-29 113 views
1

我想調試一個核心轉儲,並想訪問使用C++中的模板類實現的變量。訪問GDB中的C++模板變量

我已在我的可執行文件符號的objdump的它具有以下的標誌之一 hmapnspace::HandleMapParameters<(hmapnspace::HandleType)1>::m_arHandleArray

但是當我嘗試在gdb訪問此變量它給了我下面的錯誤:

(gdb) p hmapnspace::HandleMapParameters<(hmapnspace::HandleType)1>::m_arHandleArray 
No type "HandleMapParameters<(hmapnspace::HandleType)1>" within class or namespace "hmapnspace". 

如何正確訪問此變量?

回答

2

有時,gdb在C++程序中看起來有些奇怪的名字。爲了克服,嘗試打字

print 'hmapnspace::HandleMapPar 

並按Tab鍵完成(注意單引號,你必須使用它)。

你也可以找出變量的地址,並說類似

print *(int*) 0xdeadbabe 

方便當你需要看他的名字不在範圍內的值。

+0

感謝您的回覆。我已經嘗試訪問''內的變量,但它告訴我,變量指向一個inavlid內存區域。我知道這是不正確的,因爲我從這個數據結構引用了正確的/期望的值。 – user1159389 2012-02-29 20:48:20

+0

單引號解決了我遇到的問題。感謝一大堆建議。如果有任何參考頁面可以解釋這種特質,如果您願意告訴我們,我們將非常感激! – 2016-05-02 22:05:13

1

我認爲這是一個靜態成員變量。如果不是,你是在正確的背景下(框架)?

你是否按Tab鍵n.m.建議?我注意到gdb在命令行中不能很好地處理類型轉換。最後,gdb(例如7.2)的最新版本處理模板比早期版本好得多。例如,您現在可以在模板函數或模板類中輕鬆設置斷點,並且gdb可以在函數的所有模板版本中適當地放置斷點。但是,我不知道這些gdb改進是否適用於你正在做的事情。