在gdb中检查C / C ++堆内存统计信息

我试图调查在Linux amd64 gdb内的C / C ++的状态,是否有一个很好的方法来做到这一点?

我试过的一种方法是“调用mallinfo()”,但不幸的是我不能提取我想要的值,因为gdb没有正确处理返回值。

我不是很容易编写一个函数来编译到我附加的过程的二进制文件中,所以我可以简单地实现我自己的函数,通过以这种方式在我自己的代码中调用mallinfo()来提取值。 是否有一个聪明的把戏,可以让我在飞行中做到这一点?

另一个select可能是find堆并遍历malloc头文件/空闲列表; 我很感激任何指向我可以开始寻找这些位置和布局的地方。

我一直在试图谷歌和解决这个问题约2个小时,我已经学到了一些迷人的东西,但仍然没有find我所需要的。

Solutions Collecting From Web of "在gdb中检查C / C ++堆内存统计信息"

@fd – RedHat错误有你的答案。

mallinfo函数已被弃用,不会被更新。 一个真正的查询统计API是TDB。 今天,你有malloc_statsmalloc_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 = %d\nfordblks = %d\n", m.uordblks, m.fordblks); } 

在GDB中,你可以call dumpMallinfo()