2011-07-19 20 views
4

我有一个全局变量,它的名称有多个符号,我想打印所有这些符号。例如:在GDB中,我该如何解决重复的符号

(gdb) info var g_reallocCount 
All variables matching regular expression "g_reallocCount": 

File sv.c: 
long int g_reallocCount; 
long int g_reallocCount; 
long int g_reallocCount; 
long int g_reallocCount; 

,当我尝试使用“打印g_reallocCount”我得到的结果只有一个,这不是我需要的人。

我相信我有多个符号的原因是我正在改变的静态库链接到多个加载的模块。目前我不确定我是否可以改变这一事实。

感谢

回答

1

编辑:由于某种原因,我没有考虑到initally一个更简单的方法...假设C链接。

(gdb) shell nm /path/to/stuff | grep g_reallocCount | cut -d' ' -f1 >>foo 
(gdb) shell cat foo | awk '{print "p *0x" $0}' >foo.gdb 
(gdb) source foo.gdb 
$4 = 0 
$5 = 0 
$6 = 0 

原来的答案,类似的前提: 由于缺乏一个更好的主意,你可以尝试复制二进制文件/库,并与条命令来剥离调试符号,GDB会再输出符号的地址'info var' ,并且可以打印出来* 0xaddr

当调试符号可用时,我会提供一个打印变量地址在'info var'中的补丁。

如果您想出一个最小的测试用例来重现这一点,请考虑将其发送到gdb列表,或将它附加到错误报告。

谢谢!

+0

这是这个问题。一个最简单的测试用例就是在共享库中声明一个隐藏变量,并在与这样的库链接的可执行二进制文件中声明具有相同名称的静态变量。 –

相关问题