在没有第三方工具/项目的情况下,在 MFC C++发布版本中查找内存泄漏

Finding memory leaks in MFC C++ release build without 3rd party tools/projects

本文关键字:布版本 版本 泄漏 内存 查找 MFC 工具 第三方 项目 情况下 C++      更新时间:2023-10-16

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

对于调试版本,存在此处描述的可能性。

无需使用第三方工具/项目的发布构建解决方案是什么?

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

我尝试使用 MFC 内存泄漏工具,但它们仅适用于调试。我尝试使用各种工具应用程序,例如deleaker,但它很昂贵。GitHub上也有免费工具,但我尝试过的工具已经过时(代码未维护(,这花费了大量时间来配置和设置,而且不值得。

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

我假设您有一种方法可以在发布模式下检测泄漏,因此这种方法也可以用于此。我不记得发布MFC是否有泄漏转储。也许其他人知道这一点。