在GDB中访问C ++模板变量

时间:2012-02-29 19:09:59

标签: c++ templates 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 个答案:

答案 0 :(得分:3)

有时,gdb对C ++程序中的名称有一些看似奇怪的想法。要克服,请尝试输入

print 'hmapnspace::HandleMapPar

并按Tab键完成(注意单引号,你必须使用它)。

您还可以找出变量的地址并说出类似

的内容
print *(int*) 0xdeadbabe

当您需要观看名称不在范围内的值时,方便。

答案 1 :(得分:1)

我认为这是一个静态成员变量。如果没有,你是否在正确的背景下(框架)?

你是否像下午一样按Tab键建议?我注意到gdb不能很好地在命令行处理类型转换。

最后,最新版本的gdb(例如7.2)处理模板远比早期版本好。例如,您现在可以在模板函数或模板类中轻松设置断点,并且gdb会在函数的所有模板版本中适当地放置断点。但是,我不知道这些gdb改进是否适用于你正在做的事情。