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

我正在尝试从Linux amd64上的gdb中调查C / C ++堆的状态,有没有很好的方法呢?

我尝试过的一种方法是“调用mallinfo()”,但是不幸的是,由于gdb无法正确处理返回值,因此我无法提取所需的值。

我不容易为嵌入的进程编写要编译为二进制文件的函数,因此我可以通过以自己的代码调用mallinfo()来简单地实现自己的函数以提取值。也许有一个巧妙的技巧可以让我即时进行此操作?

另一种选择是找到堆并遍历malloc标头/自由列表;我希望能找到在这些位置和布局可以找到的起点的任何指示。

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

回答:

@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>

以上是 在gdb中检查C / C ++堆内存统计信息 的全部内容, 来源链接: utcz.com/qa/415887.html

回到顶部