如何在应用程序进行逐步调试时检查堆分配

How to check heap allocation while step debugging through the application?

本文关键字:调试 检查 分配 应用程序      更新时间:2023-10-16

我需要查看程序的某些部分的内存消耗。在这一点上,我不在乎泄漏,而只是在程序何时分配哪些对象堆中。我可以将分配追溯到某些方法,但是现在我需要更靠近。理想情况下,我想对代码进行调试以达到关键部分,并且为了每一个步骤,都将获得分配的内存和位置的更新。

我尝试以不同的方式使用valgrind- massif。我获得的最接近的是使用VGDB并在我感兴趣的部分之前和之后强迫快照,然后在massif-visualizer中手动比较它们。但是,我似乎无法以小额分配(< 1MB(的方式设置阈值或忽略方法,因为该程序在启动过程中分配了几百MB。

我还尝试了gperftools heapprofiler,但并没有进一步。

(我还尝试了堆,但到目前为止未能编译GUI工具(

我觉得我在这里错过了一些东西,使事情比必须的要复杂。在逐步调试我的应用程序时,如何检查堆分配?

Centos7 3.10,GCC 4.8.5

更新:这是一项重复出现的任务,我不能总是重新编译SW。我正在寻找一个通用解决方案,该解决方案可以在分析"奇怪"内存消耗时有效地重复。商业工具只要有规定,也可以。完成工作。

如果您在外部工具方面遇到麻烦,也可以在代码中进行粗略分析。

您可以覆盖静态的新操作员每类。这将使您可以记录/打印打字标签,尺寸等,并进行初始过滤 - 例如,您的1MIB限制。另外,您可以在全球范围内覆盖新操作员以捕获所有分配。

如果您使用标准库容器,则自定义分配器也是跟踪的选项,如果涉及更多。

一旦分配在您控制之下,您就应该能够在关键部分启用/禁用记录。