【发布时间】:2017-05-01 16:09:50
【问题描述】:
我有一个程序 myprog 一直在 valgrind 下运行:
/usr/bin/valgrind --tool=massif --tool=memcheck --leak-check=yes --track-origins=yes --log-file=/tmp/valgrind%p /opt/bin/myprog
我不太清楚 valgrind 如何在幕后工作的细节,但是当以这种方式运行时,我看到 valgrind 有一个 pid,但 myprog 没有。因此我假设 valgrind 在同一进程空间中运行 myprog 并使用一些魔法来加载目标程序。
myprog 似乎命中了assert(),并且生成了一个核心文件。我想使用 GDB 检查这个核心文件,以便深入了解assert() 的原因。我试图弄清楚如何从 myprog 加载符号以使用 GDB。
如果我使用 file valgrind,那么这只会加载 valgrind 符号,而不会从 myprog 加载任何内容
如果我使用file myprog,那么核心文件(由 valgrind 生成)将与可执行文件 (myprog) 不匹配。
有什么方法可以告诉 GDB,即使这里的“主机”进程是 valgrind,我们也想加载 myprog 符号,因为这是我们真正感兴趣的程序?
查看GDB documentation,我猜我需要add-symbol-file filename address 之类的东西,但我不确定如何确定地址。
【问题讨论】:
标签: c gdb valgrind symbols core