Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在通过应用程序进行分步调试时检查堆分配?_C++_Linux_Debugging_Memory Management_Profiling - Fatal编程技术网

C++ 如何在通过应用程序进行分步调试时检查堆分配?

C++ 如何在通过应用程序进行分步调试时检查堆分配?,c++,linux,debugging,memory-management,profiling,C++,Linux,Debugging,Memory Management,Profiling,我需要检查程序某个部分的内存消耗。此时,我不关心泄漏,只关心程序何时分配堆中的哪些对象。 我可以将分配追溯到某些方法,但现在我需要放大。 理想情况下,我希望分步调试代码,以达到关键部分,并在以后的每一步中更新已分配的内存和位置 我试着用不同的方式使用valgrind——massif。 我得到的最接近的结果是使用vgdb,在我感兴趣的部分前后强制创建快照,然后在massif visualizer中手动比较这些快照。 然而,我似乎无法设置阈值或忽略方法,而这种方法只需要少量的分配(如果您在使用外部工

我需要检查程序某个部分的内存消耗。此时,我不关心泄漏,只关心程序何时分配堆中的哪些对象。 我可以将分配追溯到某些方法,但现在我需要放大。 理想情况下,我希望分步调试代码,以达到关键部分,并在以后的每一步中更新已分配的内存和位置

我试着用不同的方式使用valgrind——massif。 我得到的最接近的结果是使用vgdb,在我感兴趣的部分前后强制创建快照,然后在massif visualizer中手动比较这些快照。
然而,我似乎无法设置阈值或忽略方法,而这种方法只需要少量的分配(如果您在使用外部工具时遇到问题,还可以在代码中进行粗略的分析

您可以覆盖每个类的静态新运算符。这将允许您记录/打印字体名称、大小等,并执行初始筛选-例如使用1MiB限制。或者,您可以全局覆盖新运算符以捕获所有分配

如果使用标准库容器,自定义分配器也是跟踪的一个选项(如果涉及更多)


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

谢谢,但这将产生与破坏malloc几乎相同的效果。我需要一个更高级别的解决方案,提供一个良好的摘要,如massif等。