如何从Valgrind的完整的调用堆栈?(How to get the full call stac

2019-06-25 20:29发布

我跑Valgrind的下列参数:

--leak-check=full --show-reachable=yes --leak-resolution=high --num-callers=100 --trace-children=yes

在内存泄漏日志,我看到完整的堆栈的一些错误消息跟踪多达为主,但一些消息看起来像以下:

==3956== 1,999,140 (68,796 direct, 1,930,344 indirect) bytes in 5,733 blocks are definitely lost in loss record 8,842 of 8,845
==3956==    at 0x4022AB8: malloc (vg_replace_malloc.c:207)
==3956== 

我怎样才能获得这些错误的完整堆栈跟踪?

Answer 1:

获取完整的堆栈跟踪将要求对所有可能在泄漏涉及(和通过设定的范围内的库/可执行调试符号--num-callers )。

如果你正在构建任何他们自己的,你需要指定-g在GCC标志(或任何其他编译器相关的标志)。

需要注意的是Valgrind的并非万无一失,并可能偶尔会错过泄漏或无法提供完整的堆栈跟踪(特别是如果你使用线程,或复杂的class实现)。

对于没有调试信息库,堆栈跟踪将停止在该库。

对于一个免费的工具, Valgrind的是它做什么很不错,但还有一个原因,像IBM的地方可以卖内存的配置文件是很大一笔钱。



文章来源: How to get the full call stack from Valgrind?