我正在尝试调试核心转储,并希望访问使用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".
如何正确访问此变量?
答案 0 :(得分:3)
有时,gdb对C ++程序中的名称有一些看似奇怪的想法。要克服,请尝试输入
print 'hmapnspace::HandleMapPar
并按Tab键完成(注意单引号,你必须使用它)。
您还可以找出变量的地址并说出类似
的内容print *(int*) 0xdeadbabe
当您需要观看名称不在范围内的值时,方便。
答案 1 :(得分:1)
我认为这是一个静态成员变量。如果没有,你是否在正确的背景下(框架)?
你是否像下午一样按Tab键建议?我注意到gdb不能很好地在命令行处理类型转换。
最后,最新版本的gdb(例如7.2)处理模板远比早期版本好。例如,您现在可以在模板函数或模板类中轻松设置断点,并且gdb会在函数的所有模板版本中适当地放置断点。但是,我不知道这些gdb改进是否适用于你正在做的事情。