VS2010分析器/泄漏检测
Posted
技术标签:
【中文标题】VS2010分析器/泄漏检测【英文标题】:VS2010 profiler/leak detection 【发布时间】:2011-02-08 12:57:10 【问题描述】:有人知道可用于 VS2010 代码的分析器和泄漏检测器吗?最好是在 Win7 上运行的。
我在这里和谷歌搜索过。我找到了一个可以工作的检漏仪(内存验证器),但我并没有留下太深刻的印象。一方面,它显示了一堆菜单泄漏和我相当有信心的东西不是真实的。我也尝试过 GlowCode,但它只是一个分析器并且拒绝在 win7 上安装。
我以前用过AQtime。它拥有我需要的一切,内存/资源泄漏检测,分析各种事物,静态分析等。不幸的是,它现在给出了虚假的结果。
我的主要直接问题是 VS2010 说程序中存在泄漏,而 VS2005 中没有。我几乎可以肯定这是误报,但我似乎找不到一个好的工具来验证这一点。 Memory Validator 没有显示相同的,并且从 VS 报告泄漏似乎不合理。
【问题讨论】:
也许值得对英特尔的 Parallel Studio 进行评估,它可用于 32 位和 64 位平台。 【参考方案1】:要查找内存泄漏,您可以尝试Visual Leak Detection 工具。
【讨论】:
【参考方案2】:Noah,正如 Ori 所提到的,Micro Focus 的 DevPartner Studio 具有泄漏检测和其他运行时分析功能。与 Compuware 下 DPS 的高昂价格不同,如果您需要,您现在可以只许可运行时分析器而不是整个套件。无耻的插件:我在 DevPartner 团队工作。我们的 64 位应用程序支持在 2011 年 2 月 4 日的 10.5 版本中提供。在http://www.DevPartner.com 上查找发布新闻和评估下载。
【讨论】:
【参考方案3】:就个人而言,我喜欢DevPartner。如果你在一家大公司工作,也许你可以说服他们支付巨额的许可证费用。它很贵,但非常非常坚固。
【讨论】:
【参考方案4】:我使用了几种商业替代品,尽管它们可以提供出色的结果,但它们也常常由于未知原因而无法正常工作:
Rational Quantity:用于性能分析的出色产品,但他们在几年内未能发布新版本,而且通常(在我的情况下)该软件经常拒绝工作 AQTime:也非常好(低于 Rational Quantity),但有时也会因为未知原因拒绝工作。 性能验证器:相同在过去的几年里,我回到了对应用程序进行抽样的相当粗略的方式。这不像使用仪器那么完美,但它更快,可以在任何应用程序上运行并且始终有效。我最喜欢的是“非常困”(http://www.codersnotes.com/sleepy),但 Luke StackWalker(http://lukestackwalker.sourceforge.net/)也相当不错。由于应用程序可以立即运行且不会明显减速,因此“更改应用程序、配置文件”循环非常短且高效。
对于查找内存泄漏,您可以使用 Windows 中的多种工具。同样,它们远非完美,并且通常只能从外部调查正在运行的应用程序,而不仅仅是在应用程序结束时报告泄漏。查找“Microsoft 调试工具”(UMDH、LeakDiag、gflags)。就个人而言,我发现编写自己的内存管理器并让它在应用程序结束时报告泄漏要容易得多。写起来并不难。你要做的是:
实现正确的 new 和 delete 运算符(我认为您应该实现 4 个 new 和 4 个 delete 运算符) 在 new 的实现中,获取调用堆栈(查找 StackWalk)并将其与分配的内存一起存储。 在构造函数中创建一个启动内存管理器的类,并在析构函数中报告所有泄漏(包括调用堆栈)。 创建该类类型的全局变量。可能需要使用 #pragma(init_seg) 使其成为特殊的全局变量。【讨论】:
【参考方案5】:这里也有非常简单易用的泄漏检测代码:http://www.codeproject.com/kb/cpp/MemLeakDetect.aspx
【讨论】:
【参考方案6】:不知道如何链接到这个,我之前发布过类似的问题:
您可以使用 umdh.exe 来捕获和比较泄漏发生前后的进程快照。这对 Debug 二进制文件最有效,但在 Release 中也是可行的,前提是符号路径设置正确 - 它会为您提供在第一个和第二个快照之间分配的内存调用堆栈。
http://support.microsoft.com/kb/268343
这种方法的优点是免费。
【讨论】:
以上是关于VS2010分析器/泄漏检测的主要内容,如果未能解决你的问题,请参考以下文章