【问题标题】:Finding memory leaks in MFC C++ release build without 3rd party tools/projects在没有 3rd 方工具/项目的 MFC C++ 版本中查找内存泄漏
【发布时间】:2014-12-05 08:44:42
【问题描述】:

我有一个简单的问题: 如何跟踪 VS 2010 MFC C++ 项目中的内存泄漏?

对于调试版本,有here 描述的可能性。

在不使用 3rd 方工具/项目的情况下发布构建的解决方案是什么?

【问题讨论】:

    标签: c++ memory-leaks mfc release


    【解决方案1】:

    唯一的解决方案是自己重写内存分配运算符(newdelete);这些运算符可以将任何内存分配和释放记录到某种日志中,因此您稍后将分析此日志。您可以在此处查看详细信息:Overriding memory allocation method standard libraries use? 但是,这会严重影响速度。 我不确定是否也可以覆盖 freemalloc 函数。您可以使用#define 替换您自己代码中的标准freemalloc,但我不确定您的库依赖项是否可行,因此您的内存分配/释放日志可能会丢失由库依赖项分配的数据。当然,您可以使用自己的内存管理函数重新构建所有库。

    【讨论】:

      【解决方案2】:

      我曾尝试使用 MFC 内存泄漏工具,但它们只能在 Debug 中使用。我曾尝试使用各种工具应用程序,例如deleaker,但价格昂贵。 GitHub 上也有免费工具,但我尝试过的工具已经过时(代码未维护),这需要花费大量时间来配置和设置,而且不值得。

      信不信由你,我发现的最好的“工具”是通过迭代编译实现程序组件隔离。只需浏览您的代码,然后从大到小禁用/注释掉代码。换句话说,您注释掉所有代码,没有泄漏等。重新编译并让泄漏转储告诉您是否存在泄漏。你可以这样做,直到错误的代码跳出来。它出奇地有效。有时最简单的解决方案是最好的。

      我假设您有一种在发布模式下检测泄漏的方法,因此这种方法也适用于这种情况。我不记得 Release MFC 是否有泄漏转储。也许其他人会不自觉地知道这一点。

      【讨论】:

        猜你喜欢
        • 2010-10-12
        • 2011-01-22
        • 2013-02-03
        • 2013-09-15
        • 2011-04-19
        • 2012-08-15
        • 2012-08-09
        • 1970-01-01
        相关资源
        最近更新 更多