VS2010性能分析器/内存泄漏检测工具

10

有没有人知道一个可以与VS2010代码一起使用的性能分析器和泄漏检测器?最好是在Win7上运行。

我在这里和谷歌上都搜索过了。我找到了一个可用的泄漏检测器(Memory Validator),但我不太满意。首先,它显示了许多菜单泄漏等问题,我相当确信这些并不是真实存在的。我也尝试了GlowCode,但它只是一个分析器,而且拒绝在Win7上安装。

我曾经使用AQtime。它拥有我所需要的所有功能,包括内存/资源泄漏检测、各种各样的分析和静态分析等。但现在它提供的结果是虚假的。

我的主要问题是,VS2010声称程序中存在泄漏,而在VS2005中却没有。我几乎确定这是误报,但我似乎找不到一个好的工具来验证。Memory Validator没有显示相同的问题,而从VS中泄漏的报告似乎不合理。


也许值得对英特尔的Parallel Studio进行评估,该软件可用于32位和64位平台。 - codencandy
6个回答

3

正如Ori所提到的,来自Micro Focus的DevPartner Studio具有泄漏检测和其他运行时分析功能。与Compuware时期昂贵的DPS不同,现在您可以仅许可运行时分析器而无需整个套件(如果这是您所需的)。无耻地插一下:我在DevPartner团队工作。我们的64位应用程序支持将于2011年2月4日发布的10.5版本中推出。请查看http://www.DevPartner.com上的发布新闻和评估下载。


3

1

个人而言,我喜欢DevPartner。如果你在一家大公司工作,也许可以说服他们支付昂贵的许可证费用。它虽然价格高昂,但非常稳定可靠。


0

我使用了几个商业替代品,虽然它们可以提供出色的结果,但由于未知原因,它们也经常无法正常工作:

  • Rational Quantity:性能分析的绝佳产品,但在几年内未发布新版本,并且经常(在我的情况下)软件拒绝工作
  • AQTime:同样非常好(不如 Rational Quantity),但有时也会因未知原因而拒绝工作。
  • Performance validator:同上

在过去的几年中,我回到了相当粗糙的应用程序采样方式。这不像使用仪器那样完美,但速度更快,可以在任何应用程序上运行,并且始终有效。 我最喜欢的是 "Very Sleepy" (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) 将其设置为特殊的全局变量。

0

0

不确定如何链接到此内容,我之前在回答类似问题时发布了以下内容:

您可以使用umdh.exe捕获和比较泄漏发生之前和之后的进程快照。这对于Debug二进制文件效果最佳,但如果正确设置符号路径,则Release也可行 - 它将为您提供在第一个和第二个快照之间分配的内存的调用堆栈。

http://support.microsoft.com/kb/268343

这种方法的优点是免费的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接