0

我正在从事一个 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)
4

3 回答 3

1

你真正想要的是:

libtool --mode=execute valgrind --leak-check=full exename ...
于 2013-10-29T23:43:22.117 回答
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\""

这样我就不必输入相当长的命令行。

于 2013-10-30T21:08:07.490 回答
0

这可以通过在“执行”模式下使用 libtool 调用可执行文件来解决,如 ldav1s 以及此处的手册中所述:libtool: Debugging-executables。感谢 ldav1s 的洞察力!

于 2013-10-30T03:13:04.553 回答