C++;旧版应用程序正在尝试查找正在积累内存的部分 我有大量的传统应用程序,用C++编写,应用程序中的某些部分是 在应用程序的同一部分或多个部分中累积内存。当我在应用程序中触发事件时 我无法调试这部分。有许多进程内同步调用及其 很难跟上应用程序的流程。 我需要找到保存数据而不免费的容器在哪里 每次我触发此事件时。 建议使用哪些工具或方法来帮助我查找泄漏? 我尝试使用: 视觉检漏器和C++内存验证器,但很难找到问题所在。 < P>释义>代码>所有精心设计的程序都是一样的;每个古老的三端口遗留代码都有其自身的可怕之处

C++;旧版应用程序正在尝试查找正在积累内存的部分 我有大量的传统应用程序,用C++编写,应用程序中的某些部分是 在应用程序的同一部分或多个部分中累积内存。当我在应用程序中触发事件时 我无法调试这部分。有许多进程内同步调用及其 很难跟上应用程序的流程。 我需要找到保存数据而不免费的容器在哪里 每次我触发此事件时。 建议使用哪些工具或方法来帮助我查找泄漏? 我尝试使用: 视觉检漏器和C++内存验证器,但很难找到问题所在。 < P>释义>代码>所有精心设计的程序都是一样的;每个古老的三端口遗留代码都有其自身的可怕之处,c++,memory-leaks,C++,Memory Leaks,工具箱中的主要工具(基本上独立于开发环境)包括: 简化:删除或替换为NOP或模型,尽可能多地使用琐碎的实现,同时保留不好的行为。这将有助于消除令人困惑的细节 仪器:在每次调用前后检查堆状态;从对象的构造函数和析构函数中写入调试信息,说出它们的位置,以查看泄漏的资源被分配到哪里;等等 契约:对方法执行前置和后置条件检查,以检查正确的资源使用状态 二进制搜索:使用一个函数来检查反映正确资源使用情况的不变量,并在有问题的代码段中使用二进制细分来查找违反它的地方 当然,在您的情况下,什么工作在很大程度上

工具箱中的主要工具(基本上独立于开发环境)包括:

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

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

    如果处理大型代码库中的缺陷很容易,那么我们中的许多人将没有工作。一本书:“有效地使用遗留代码”。是的,你是对的,但在这种情况下我需要某种方法。是的,但我们不知道代码库,也不知道你尝试使用的工具遇到了什么问题,所以我们可以如何帮助你?有点晚了,但你尝试过valgrind吗?代码库太大了(20年前,上帝知道他们投入了多少时间我需要一些工具或方法使用这些技术和调试malloc库,我能够在一个开发了30多年的模拟器中追踪到堆损坏。它看起来势不可挡,我不能说它不起作用,但这些技术可以而且确实起作用。