2012-02-29 92 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改进是否适用于你正在做的事情。