【发布时间】:2011-02-03 14:50:43
【问题描述】:
我正在尝试从 Linux amd64 上的 gdb 中调查 C/C++ 堆的状态,有什么好的方法吗?
我尝试过的一种方法是“调用 mallinfo()”,但不幸的是我无法提取我想要的值,因为 gdb 没有正确处理返回值。
我不容易为我所附加的进程编写一个要编译成二进制文件的函数,所以我可以简单地实现我自己的函数来通过在我自己的代码中调用 mallinfo() 来提取值.是否有一个聪明的技巧可以让我即时执行此操作?
另一种选择可能是定位堆并遍历 malloc 标头/空闲列表;我会很感激任何关于我可以从哪里开始找到这些位置和布局的指针。
我一直在尝试使用 Google 并围绕这个问题阅读了大约 2 个小时,我学到了一些有趣的东西,但仍然没有找到我需要的东西。
【问题讨论】:
-
你需要了解什么状态?您需要了解哪些统计数据?
-
堆大小、使用量和空闲量是一个好的开始
-
gdb 什么地方做得不好?
-
好吧,我只是根据我的要求正确使用我自己的定义,即能够取消引用“call mallinfo()”返回的结构并查看成员的值其中。
-
遗憾的是,我认为情况变得更加复杂,因为劣质没有包含 malloc.h 并且“struct mallinfo”似乎不在类型列表中;也许如果是,那么 gdb 将允许我查询其成员。相反,我只返回一个整数值(可能是因为未包含函数定义并且它默认为 int 返回类型);这可能是一个指针,但我不知道如何取消引用它(不是指向内存的指针)。
标签: linux gdb malloc x86-64 heap-memory