我的目标是从死后核心文件中弄清楚为什么特定进程消耗大量内存.有什么总结我可以得到某种方式?显而易见的是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这样的工具,这是一项非常艰苦的工作.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。