C++遗留应用程序试图找到正在积累内存的部分
C++ legacy application trying to find which part is accumulating memory
我有一个用c++编写的大型遗留应用程序,该应用程序的某些部分是在应用程序中的同一部分或多个部分中累积内存。当我在应用程序中触发事件时我不能介入调试这个部分。有许多同步进程调用及其很难遵循应用程序的流程
我需要找到那些保存数据却无法获得免费数据的容器在哪里每次我触发这个事件
建议使用哪些工具或方法来帮助我找到泄漏
我尝试使用:
视觉泄漏检测器和c++内存验证器,但很难找到问题所在。
套用all well-engineered programs are alike; each ancient thrice-ported piece of legacy code is awful in its own way
。
工具箱中的主要工具与您的开发环境大致无关,它们是:
- 简化:去掉或替换为NOP,或者用尽可能多的琐碎实现来模拟代码,同时保留不良行为。这将有助于消除混淆的细节
- 仪器:在每次调用前后检查您的堆状态;从对象的构造函数和析构函数中写入调试信息,吐出它们的位置,以查看泄漏的资源被分配到哪里;等等
- 契约:对方法执行条件前和条件后检查,检查资源使用状态是否正确
- 二进制搜索:使用一个函数来检查反映正确资源使用情况的不变量,并在有问题的代码部分中使用二进制细分来查找违反它的地方
当然,在您的情况下,什么能起作用在很大程度上取决于代码的细节。
相关文章:
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- 应用程序内存使用量减少
- 在C++应用程序中使用 Tensorflow:如何释放 GPU 内存
- 任务管理器 - C/C++ 应用程序 - 分配的地址空间与已用内存
- OpenGL GLFW 应用程序 - 客户端内存限制
- 使用没有堆内存分配的接口的框架应用程序?
- 我们如何访问 Node.js 应用程序之外的内存?
- 使用 IPC 共享内存的应用程序是否可以访问彼此的代码?
- 使用 valgrind 的地块测量 c++ 应用程序的最大内存使用量(堆栈和堆)
- 为什么Linux报告了我的应用程序的内存使用情况
- 是否可以锁定应用程序中常见控件使用的内存?
- 如何以编程方式获取应用程序的内存使用情况
- 32 位应用程序内存不足
- CRT 检测到应用程序在堆缓冲区(新建/删除)类结束后写入内存
- Android OpenCV 应用程序的内存问题
- 将 python 嵌入我的应用程序时内存泄漏
- C++应用程序如何使用比 RSS 内存更多的堆
- C++应用程序中的静态数据内存限制
- Windows 32 位 mfc 应用程序的虚拟内存中的地址
- 无限分配内存应用程序崩溃