使用gdb进行事后内存泄漏搜索(和分析)

我的目标是从死后核心文件中弄清楚为什么特定进程消耗大量内存.有什么总结我可以得到某种方式?显而易见的是valgrind是不可能的,因为我无法实时访问流程.

首先得到类似于/ proc /“pid”/ maps的输出会有所帮助,但是

maintenance info sections

(如此处所述:GDB: Listing all mapped memory regions for a crashed process)在gdb中没有显示堆内存消耗.

info proc map

是一个选项,因为我可以使用完全相同的代码访问机器,但据我所知,它是不正确的.我的进程使用700MB-s,但看到的地图只占大约10 MB.而且我没有看到.so-s在那里可见

maintenance print statistics

你知道其他可能有用的命令吗?

我可以随时检测代码,但这并不容易.通过指针到达所有分配的数据就像大海捞针一样.

你有什么想法?

最佳答案
在gdb中进行此类事后调试是一门艺术,而不仅仅是一门科学.

在我看来,最重要的工具是能够编写在gdb内部运行的脚本.手册将向您解释.我发现它非常有用的原因是它允许你做一些事情,比如走数据结构和打印信息.

你在这里的另一种可能性是检测你的malloc版本 – 编写一个新的malloc函数,它保存有关正在分配的内容的统计信息,以便你可以查看那些事后验证.当然,您可以调用原始malloc来执行实际的内存分配工作.

对不起,我不能给你一个明显而简单的答案,只会在这里给你一个直接的解决方案 – 没有像valgrind这样的工具,这是一项非常艰苦的工作.

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...