【发布时间】:2012-06-29 20:44:22
【问题描述】:
我使用以下参数运行Valgrind:
--leak-check=full --show-reachable=yes --leak-resolution=high --num-callers=100 --trace-children=yes
在内存泄漏日志中,我看到一些错误消息,其中包含到 main 的完整堆栈跟踪,但有些消息如下所示:
==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==
如何获取这些错误的完整堆栈跟踪?
【问题讨论】:
-
最新发布的 Valgrind 版本只支持 --num-callers 直到 50。所以,不清楚你使用的是哪个版本。上面的堆栈跟踪看起来不完整。这可能与您的应用程序的编译方式有关(例如,选项 -fomit-frame-pointer 可能会使堆栈跟踪更难以生成)
-
凹凸。 (stackoverflow“碰撞”帖子吗?)同样的问题。使用 -g 编译应用程序。它显示了可能的内存泄漏,堆栈跟踪从 malloc()、调用 malloc() 的函数和 main() 开始,跳过中间的所有内容,包括与 main() 位于同一文件中的函数。 ??我在网上看到没有这 3 个堆栈帧限制的示例..??有什么想法吗?
-
我在 Ubuntu 13.10 上使用 valgrind 3.8.1 并查看不包含所有中间调用的堆栈跟踪。使用 gcc 编译时没有优化(或者我可能需要 -Og 或其他东西......)
-
您是否确保为您的应用程序链接到的所有库都安装了调试符号?
标签: memory-leaks valgrind callstack