VS2010分析器/泄漏检测

时间:2010-04-15 18:53:42

标签: c++ visual-studio-2010 windows-7

任何人都知道可以使用VS2010代码的探查器和检漏仪吗?最好是在Win7上运行的。

我在这里和谷歌搜索过。我找到了一个可以工作的检漏仪(Memory Validator),但我并没有太深刻的印象。首先,它显示了一堆菜单泄漏和我相当自信的东西并不真实。我也尝试过GlowCode,但它只是一个分析器而且拒绝在win7上安装。

我曾经使用过AQtime。它拥有我需要的一切,内存/资源泄漏检测,各种事物的分析,静态分析等。不幸的是,它现在给出了伪造的结果。

我的主要直接问题是VS2010说在VS2005中没有程序泄漏。我几乎肯定这是误报,但我似乎无法找到一个好的工具来验证这一点。 Memory Validator没有显示相同的内容,并且VS的泄漏报告似乎不合理。

6 个答案:

答案 0 :(得分:3)

要查找内存泄漏,您可以尝试Visual Leak Detection工具。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

就个人而言,我很喜欢DevPartner。如果你在一家大公司工作,也许你可以说服他们支付高昂的执照。它价格昂贵,但非常坚固。

答案 3 :(得分:0)

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

  • Rational Quantity:用于性能分析的出色产品,但是它们在几年内未能发布新版本,并且经常(在我的情况下)软件经常拒绝工作
  • AQTime:也非常好(低于Rational Quantity)但有时也因为不明原因而拒绝工作。
  • 效果验证器:相同

在过去的几年里,我回到了相当粗略的方式来抽样应用程序。这不如使用仪器那么完美,但它更快,可以在任何应用程序上运行并始终有效。我最喜欢的是“非常困”(http://www.codersnotes.com/sleepy)但是Luke StackWalker(http://lukestackwalker.sourceforge.net/)非常好。由于应用程序可以立即运行而且没有明显的减速,因此“更改应用程序,配置文件”循环非常短且有效。

要查找内存泄漏,Windows中可以使用多种工具。同样,它们远非完美,通常只能从外部调查运行的应用程序,而不仅仅是在应用程序结束时报告泄漏。查找“Microsoft调试工具”(UMDH,LeakDiag,gflags)。就个人而言,我发现编写自己的内存管理器要简单得多,并让它在应用程序结束时报告泄漏。写起来并不难。你要做的是:

  • 实施正确的new和delete运算符(我认为你应该实现4个新的和4个删除运算符)
  • 在new的实现中,获取调用堆栈(查找StackWalk)并将其与分配的内存一起存储。
  • 创建一个在构造函数中启动内存管理器的类,并在析构函数中报告所有泄漏(包括调用堆栈)。
  • 创建该类类型的全局变量。可能需要使用#pragma(init_seg)将其设为特殊的全局变量。

答案 4 :(得分:0)

这里也非常简单易用的泄漏检测代码:http://www.codeproject.com/kb/cpp/MemLeakDetect.aspx

答案 5 :(得分:0)

不确定如何链接到此,我之前发布以回应类似的问题:

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

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

这种方法具有免费的优势。