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

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

我有一个用 c++ 编写的大型遗留应用程序,应用程序中的某些部分是 在应用程序的相同部分或多个部分中积累内存。当我在应用程序中触发事件时 我不能介入调试这部分。进程调用中有许多同步及其 很难跟上应用程序的流程。
我需要找到保存数据而不是免费的容器在哪里 每次我触发这个事件。
有哪些推荐的工具或方法可以帮助我找到漏洞?
我尝试使用:
visual leak detector 和 c++ Memory validator 但很难找到问题所在。

换句话说,all well-engineered programs are alike; each ancient thrice-ported piece of legacy code is awful in its own way

工具箱中与您的开发环境基本无关的主要工具有:

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

在你的情况下,什么有效当然在很大程度上取决于代码的细节。