我试图调查在Linux amd64 gdb内的C / C ++堆的状态,是否有一个很好的方法来做到这一点?
我试过的一种方法是“调用mallinfo()”,但不幸的是我不能提取我想要的值,因为gdb没有正确处理返回值。
我不是很容易编写一个函数来编译到我附加的过程的二进制文件中,所以我可以简单地实现我自己的函数,通过以这种方式在我自己的代码中调用mallinfo()来提取值。 是否有一个聪明的把戏,可以让我在飞行中做到这一点?
另一个select可能是find堆并遍历malloc头文件/空闲列表; 我很感激任何指向我可以开始寻找这些位置和布局的地方。
与使用的%相比,堆大小意外地大
如何以编程方式获取Linux上堆的地址
为什么Windows允许创build私有堆?
Ubuntu 16.04 – malloc实现。 指向下一个块的指针在哪里?
从地址查找堆或堆块或段
我一直在试图谷歌和解决这个问题约2个小时,我已经学到了一些迷人的东西,但仍然没有find我所需要的。
valgrind显示的额外程序内存消耗
在Windows中禁用LFH?
windbg的“!heap -h”输出中的“Internal”是什么意思?
查询,如果堆是可执行的
JAVA_OPTS增加堆大小
@fd – RedHat错误有你的答案。
mallinfo函数已被弃用,不会被更新。 一个真正的查询统计API是TDB。 今天,你有malloc_stats和malloc_info 。 我找不到任何一个文件,但这是他们给你的。
这足够接近你所需要的吗?
(gdb) call malloc_stats() Arena 0: system bytes = 135168 in use bytes = 96 Total (incl. mmap): system bytes = 135168 in use bytes = 96 max mmap regions = 0 max mmap bytes = 0 (gdb) call malloc_info(0,stdout) <malloc version="1"> <heap nr="0"> <sizes> <unsorted from="1228788" to="1229476" total="3917678" count="3221220448"/> </sizes> <total type="fast" count="0" size="0"/> <total type="rest" count="3221220448" size="3917678"/> <system type="current" size="135168"/> <system type="max" size="135168"/> <aspace type="total" size="135168"/> <aspace type="mprotect" size="135168"/> </heap> <total type="fast" count="0" size="0"/> <total type="rest" count="3221220448" size="3917678"/> <system type="current" size="135168 /> <system type="max" size="135168 /> <aspace type="total" size="135168"/> <aspace type="mprotect" size="135168"/> </malloc>
如果您可以更改代码:
#include <malloc.h> #include <stdio.h> void dumpMallinfo(void) { struct mallinfo m = mallinfo(); printf("uordblks = %dnfordblks = %dn",m.uordblks,m.fordblks); }
在GDB中,你可以call dumpMallinfo() 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。