如何在应用程序进行逐步调试时检查堆分配
How to check heap allocation while step debugging through the application?
我需要查看程序的某些部分的内存消耗。在这一点上,我不在乎泄漏,而只是在程序何时分配哪些对象堆中。我可以将分配追溯到某些方法,但是现在我需要更靠近。理想情况下,我想对代码进行调试以达到关键部分,并且为了每一个步骤,都将获得分配的内存和位置的更新。
我尝试以不同的方式使用valgrind- massif。我获得的最接近的是使用VGDB并在我感兴趣的部分之前和之后强迫快照,然后在massif-visualizer中手动比较它们。但是,我似乎无法以小额分配(< 1MB(的方式设置阈值或忽略方法,因为该程序在启动过程中分配了几百MB。
。我还尝试了gperftools heapprofiler,但并没有进一步。
(我还尝试了堆,但到目前为止未能编译GUI工具(
我觉得我在这里错过了一些东西,使事情比必须的要复杂。在逐步调试我的应用程序时,如何检查堆分配?
Centos7 3.10,GCC 4.8.5
更新:这是一项重复出现的任务,我不能总是重新编译SW。我正在寻找一个通用解决方案,该解决方案可以在分析"奇怪"内存消耗时有效地重复。商业工具只要有规定,也可以。完成工作。
如果您在外部工具方面遇到麻烦,也可以在代码中进行粗略分析。
您可以覆盖静态的新操作员每类。这将使您可以记录/打印打字标签,尺寸等,并进行初始过滤 - 例如,您的1MIB限制。另外,您可以在全球范围内覆盖新操作员以捕获所有分配。
如果您使用标准库容器,则自定义分配器也是跟踪的选项,如果涉及更多。
一旦分配在您控制之下,您就应该能够在关键部分启用/禁用记录。
相关文章:
- 运行时检查失败 #2 MSVC 仅使用 utf8proc 进行调试
- 如何使用 Malloc 调试来检查本机内存泄漏?
- 通过调试来检查C 中单行表达式执行顺序的方法
- 调试:运行时检查失败 #2 - 变量"LoggerThread"周围的堆栈已损坏
- 如何在应用程序进行逐步调试时检查堆分配
- 调试器在 nullptr 检查期间引发 nullptr 异常
- 如何使用 gdb 调试 LLVM 检查器时以图形方式查看 CFG
- 检查Eclipse CDT调试器中的STD :: vector的内容
- 我如何检查静态库,以查看是否正在导出调试符号
- 调试时检查映射的内容
- g++中用于检查数组索引的任何调试标志
- 可以检查空取消引用的调试软件
- 如何检查可执行文件或 DLL 是否在发布或调试模式下生成 (C++)
- 如何使用 XCode 6.1 C++调试模式检查所有局部变量
- 对于隐式定义的构造函数/析构函数,如何通过调试器检查值
- NetBeans c++的方式来检查编译用调试的代码
- 当检查变量和0是否相等时,给出段错误(调试时)
- 可以启用libc++调试检查
- 什么调试器可以检查c++代码是否存在内存泄漏
- 如何将所有值保存在内存中,并使用命令检查它们,就像在 Matlab 中调试一样