我正在进行一个GNU Autotools项目,我遇到了一些奇怪的内存分配错误。我想使用Valgrind进行调试,但是当我在其下运行我的可执行文件时,我没有得到任何行号或源文件名。我甚至尝试使用以下命令进行配置,以便优化为-O0
并使用-g
标志进行调试:
./configure 'CXXFLAGS=-g -O0'
然后我将在Valgrind下运行可执行文件,如下所示:
valgrind -leak-check=full ./[exename]
我仍然只看到神秘的输出,如:
==3493== 24 bytes in 1 blocks are definitely lost in loss record 137 of 303
==3493== at 0x4A06409: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==3493== by 0x46904A: xmalloc (in /usr/bin/bash)
答案 0 :(得分:1)
你真正想要的是:
libtool --mode=execute valgrind --leak-check=full exename ...
答案 1 :(得分:1)
补充ldav1s的答案,这就是我在 .bashrc 上的内容:
alias lgdb="libtool --mode=execute gdb"
alias lddd="libtool --mode=execute ddd"
alias lvalgrind="libtool --mode=execute valgrind"
alias lvalgrinddd="libtool --mode=execute valgrind --db-attach=yes --db-command=\"ddd %f %p\""
这样我就不必输入相当长的命令行。
答案 2 :(得分:0)
这可以通过在ldav1s和“{3}}手册”中描述的“执行”模式下使用libtool调用可执行文件来解决。感谢您的见解ldav1s!