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

zek*_*eke 5 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;
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

mat*_*att 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
Run Code Online (Sandbox Code Playgroud)

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

当调试符号可用时,我将提出一个补丁来打印“info var”中变量的地址。

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

谢谢!