Visual C++ - 内存泄漏检测

Posted

技术标签:

【中文标题】Visual C++ - 内存泄漏检测【英文标题】:Visual C++ - Memory Leak Detection 【发布时间】:2011-02-18 16:45:45 【问题描述】:

有什么建议吗?这篇 SO 帖子讨论了 Visual Leak Detector,但我正在寻找其他工具。另外,请不要推荐this。

【问题讨论】:

而 _CRTDBG 有什么问题?跟踪二进制转储对您来说不够好,嗯 ;-) @Skizz:滚动到底部 :) msdn.microsoft.com/en-us/library/e5ewb1h3%28v=VS.80%29.aspx CRT 泄漏检测只要设置正确就可以正常工作;当然一开始可能会让人困惑,但一旦你弄清楚了,你就永远不会忘记:) 您为什么要寻找其他工具? VLD 有什么问题?是否缺少特定功能? 我喜欢 Microsoft 页面顶部的内容:这适用于:Visual Studio Express:NO Standard:NO Pro:NO 这意味着它不适用 【参考方案1】:

https://sourceforge.net/projects/diagnostic/

http://diagnostic.sourceforge.net/index.html

我尝试了很多内存泄漏检测器,很难将它们全部计算在内。其中一些崩溃了,其中一些产生了无效的结果,其中一些根本没有帮助。最终,我制作了自己的检漏仪,但投入了很多精力 - 所以暂时不免费。支持托管/本机/32 位和 64 位架构。

如果您想进一步开发此工具,请随时与我联系。

【讨论】:

更新了链接。不过好久没碰那个项目了。【参考方案2】:

如果您能负担得起一些钱,请使用 Intel Parallel Inspector (http://software.intel.com/en-us/intel-parallel-inspector)。

它不需要任何代码修改并提供良好的报告。

我必须在工作中寻找好的工具来做到这一点,这是我发现的(迄今为止)最好的工具。

【讨论】:

【参考方案3】:

试试 Dr.Memory。 他们有适当的视觉工作室集成,文档非常好。 也很容易使用。

【讨论】:

【参考方案4】:

试试Deleaker或DevPartner,这两个都够用了。

更新:

C++ Memory Validator,工作正常且价格合理。

【讨论】:

【参考方案5】:

对于更严肃的项目,不能信任 VLD。

英特尔有一个很好的工具,叫做 Inspector。

花了 3 天时间寻找一个在 Visual Studio 中使用 C++ 查找 x64 二进制文件泄漏的好工具,这是我找到的唯一好选择。

【讨论】:

【参考方案6】:

Jacob,DevPartner Studio 中的 BoundsChecker 工具包含两种用于 VC++ 的泄漏检测器。未检测的版本将在过程关闭时将泄漏制成表格。编译时检测器将在泄漏发生时中断泄漏,同时显示泄漏点处的当前调用堆栈,以及显示泄漏内存分配位置的分配堆栈跟踪。 64 位版本的 DPS 和 BoundsChecker 10.5 于 2011 年 2 月 4 日发布,为 Visual Studio 2010、2008 和 2005 提供 x64 应用程序支持。我们还有一个新的定价模型,因此您可以仅许可 BoundsChecker 功能并升级到完整的 DPS仅当您以后发现需要其他分析器或静态分析功能时才使用套件。一定要和你的销售代表讨价还价。支付标价就像支付新车的标价一样。无耻的插件:我在 DevPartner 团队工作。 DPS 10.5 代表了我的团队自 Compuware 关闭 NuMega 实验室以来最大的技术能力版本。请在 10.5 上线时针对您自己的应用程序和技术堆栈对其进行评估。干杯。 Matt Schuetze,DevPartner 产品负责人(是的,这意味着 PO 担任正常的 Scrum 团队角色。)

【讨论】:

【参考方案7】:

正如 Noah Roberts 所建议的,我也觉得内存验证器是在 Visual Studio 中检测泄漏的最佳工具。

净化也有效。

【讨论】:

【参考方案8】:

还有应用程序验证器。它可以跟踪一大堆其他问题,除了您忘记释放 win32 对象(如句柄等)的地方的泄漏......

MSDN 链接是:http://msdn.microsoft.com/en-us/library/ms220948(VS.80).aspx

【讨论】:

【参考方案9】:

我最近使用过Visual Leak Detector,效果很好。构建它非常简单(只需包含vld.h)并且不需要任何工具。我发现我需要编写几个脚本来将输出解析为对我的目的更有用的东西(它急需一个像样的 GUI)。请注意新网站 -- 该项目正在 Codeplex 上积极维护 -- Codeproject 链接非常旧。

【讨论】:

【参考方案10】:

不久前问了一个类似的问题,但具体与2010年有关:VS2010 profiler/leak detection

如果您不使用 2010,您可以考虑使用 AQtime。大多数时候这并不太可怕。有时会认为它无法找到与泄漏相关的对象,只是说“crt memory”或其他什么。

我最近尝试的另一个称为“内存验证器”。不完全是一个很好的界面,但它似乎确实可以工作,并且也可以与 2010 一起工作(只是没有任何其他类型的配置文件,这是我在这样的商业工具中所期望的)。

当我在询问之前进行搜索时,可能是其他类似问题中提到的 GlowCode。

【讨论】:

您似乎没有收到很多答案。我会检查 AQtime .. 现在我正在使用 VLD,它类似于默认的 VS 工具,但更详细。 我只是在使用一个太新的编译器。几乎没有人有任何与它兼容的东西。

以上是关于Visual C++ - 内存泄漏检测的主要内容,如果未能解决你的问题,请参考以下文章

Visual C++ - 内存泄漏检测

可以在 Visual Studio 的泄漏检测中隐藏安全的内存泄漏吗?

使用 Visual Studio 2010 检测内存泄漏?

Visual Studio vc++的静态代码内存泄漏检测

Visual Studio 内存泄漏检测不打印文件名和行号

C++内存泄漏检测工具