C++遗留应用程序试图找到正在积累内存的部分

C++ legacy application trying to find which part is accumulating memory

本文关键字:内存 应用程序 C++      更新时间:2023-10-16

我有一个用c++编写的大型遗留应用程序,该应用程序的某些部分是在应用程序中的同一部分或多个部分中累积内存。当我在应用程序中触发事件时我不能介入调试这个部分。有许多同步进程调用及其很难遵循应用程序的流程
我需要找到那些保存数据却无法获得免费数据的容器在哪里每次我触发这个事件
建议使用哪些工具或方法来帮助我找到泄漏
我尝试使用:
视觉泄漏检测器和c++内存验证器,但很难找到问题所在。

套用all well-engineered programs are alike; each ancient thrice-ported piece of legacy code is awful in its own way

工具箱中的主要工具与您的开发环境大致无关,它们是:

  1. 简化:去掉或替换为NOP,或者用尽可能多的琐碎实现来模拟代码,同时保留不良行为。这将有助于消除混淆的细节
  2. 仪器:在每次调用前后检查您的堆状态;从对象的构造函数和析构函数中写入调试信息,吐出它们的位置,以查看泄漏的资源被分配到哪里;等等
  3. 契约:对方法执行条件前和条件后检查,检查资源使用状态是否正确
  4. 二进制搜索:使用一个函数来检查反映正确资源使用情况的不变量,并在有问题的代码部分中使用二进制细分来查找违反它的地方

当然,在您的情况下,什么能起作用在很大程度上取决于代码的细节。