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

时间:2010-04-02 02:38:37

标签: linux gdb malloc heap x86-64

我正在尝试从Linux amd64上的gdb内部调查C / C ++堆的状态,有没有一种很好的方法可以做到这一点?

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

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

另一种选择可能是找到堆并遍历malloc标题/空闲列表;我非常感谢能够找到这些位置和布局的任何指示。

我一直在尝试谷歌并阅读这个问题大约2个小时,我已经学到了一些有趣的东西,但仍然找不到我需要的东西。

2 个答案:

答案 0 :(得分:26)

@fd - RedHat bug得到了答案。

{@ 1}}函数已弃用,不会更新。真正的查询统计API是TDB。今天,您有mallinfomalloc_stats。我找不到任何一个文档,但这是他们给你的。

这是否足够接近你需要的东西?

malloc_info

答案 1 :(得分:3)

如果您可以更改代码:

#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()