在GDB中如何解决重复的符号

时间:2011-07-19 06:43:03

标签: debugging 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;

当我尝试使用“print g_reallocCount”时,我只得到一个结果,而不是我需要的结果。

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

谢谢

1 个答案:

答案 0 :(得分:1)

编辑:出于某种原因,我没有考虑一种更简单的方式......假设是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

原始答案,类似前提: 由于缺乏更好的想法,您可以尝试复制二进制文件库并使用strip命令剥离调试符号,然后gdb将在'info var'中输出符号的地址 你可以用print * 0xaddr打印它

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

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

谢谢!