运行时检查生成的核心文件我有一个程序myprog
这是我一直的valgrind下运行:如何计划下的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
,那么这只是如果我使用file myprog
,则核心文件(通过Valgrind的产生)将不匹配的可执行文件(MYPROG)加载的valgrind符号和myprog
什么。
有什么方法可以告诉GDB,尽管这里的“主机”过程是valgrind
,我们也想加载myprog
符号,因为这是我们真正感兴趣的程序吗?
通过GDB documentation翻看,我猜我需要类似add-symbol-file filename address
,但我不知道如何找出地址是什么。
是的,你是绝对正确的。我在Ubuntu下获得与您类似的简单测试可执行文件相同的结果。不幸的是,我所拥有的系统是一个专有的嵌入式(基于Linux)系统,其中包含有趣的GDB封装和一些额外的核心和口哨,用于其核心设备。我将不得不深入研究... –
请注意,您也可以使用gdb + vgdb来调试在Valgrind下运行的应用程序(请参阅http://www.valgrind.org/docs/manual/manual-core-adv html的#手动芯adv.gdbserver)。附注:您在命令行中指定了2个工具,但只有一个将被激活。 – phd