是否有Windows的Valgrind替代品?


210

当我发现Valgrind仅适用于Linux时,我正在研究Valgrind,以帮助改善C编码/调试-我对将OS迁移至Linux没有其他需求或兴趣,因此我想知道是否有同样好的Windows程序。


您要进行哪种调试?Valgrind是一个非常丰富的工具集,下面的答案指向各个方向。着重于内存泄漏/分配调试。
jakobengblom2 2009年

1
也许您可以在需要检查Windows时在虚拟Linux机器上测试代码。您可以在虚拟机和非虚拟机之间共享开发文件夹。也就是说,代码是否具有足够的可移植性。
Liran Orevi

Answers:


29

一些更好的商业工具:


1
净化:历久弥新,但仍然有用,如其幸存的企业所有权变化所示!
诺曼·拉姆齐

2
Insure ++永远需要花费时间来检测代码,并永远需要在运行时执行代码。
C约翰逊

117

正如jakobengblom2指出的那样,valgrind有一套工具。根据您在说的是哪一个,Windows计数器部件不同。我只会在这里提及OSS或免费工具。

1. MemCheck:

记忆博士。它是一个相对较新的工具,在Windows 7上可以很好地工作。我最喜欢的功能是,它在报告中将相同的泄漏分配堆栈进行分组。

http://code.google.com/p/drmemory/

我还使用了UMDH(http://support.microsoft.com/kb/268343),发现它非常有用且易于安装。它适用于Win2000到Win7。

AppVerifier是Windows本机代码开发人员必不可少的工具,它的“内存”检查器可以完成类似的工作 http://msdn.microsoft.com/zh-cn/library/dd371695%28v=vs.85%29.aspx

2. Callgrind:

我最喜欢的是verysleepy(http://www.codersnotes.com/sleepy)它很小,但是非常有用并且易于使用。

如果您需要更多功能,则可以免费使用AMD CodeAnalyst™Performance Analyzer: http //developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx

Windows Performance Analysis工具是Microsoft提供的免费工具,使用起来不是很容易,但是如果您愿意花时间的话,可以完成工作。http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx 下载:http : //msdn.microsoft.com/zh-cn/performance / cc752957

3.地块:

Windows上类似(不太完全匹配)的免费工具是:

来自sysinternals的VMMap:http : //technet.microsoft.com/zh-cn/sysinternals/dd535533

!windbg中的!heap命令:http : //hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html

4. Cachegrind:

上面提到的Windows Performance Tools具有一定级别的L2缓存未中分析功能,但是不如Cachegrind那样好用。

5. DRD:

在Windows上还没有发现任何免费且功能强大的东西,我能找到的唯一接近Windows的免费工具是AppVerifier中的“锁定”检查器:http : //msdn.microsoft.com/zh-cn/library /dd371695%28v=vs.85%29.aspx


2
还有gperftools(以前称为Google PerfTools)。这不是valgrind的替代品(实际上是什么),但是它具有新的malloc,cpu探查器,堆探查器和检查器。值得一看的是它在Linux和Windows(包括Mingw)和其他unices上的支持。
alexr 2012年

30

为什么不使用Valgrind + Wine调试Windows应用程序?参见 http://wiki.winehq.org/Wine_and_Valgrind

(Chromium使用它来检查Windows版本是否存在内存错误;请访问build.chromium.org并查看实验性或内存瀑布,并搜索wine。)

还有Dr. Memory,请参阅dynamorio.org/drmemory.html


3
因为那样您就不会调试Windows应用程序-您将调试Linux应用程序。
John Dibling

33
无需在Wine中重新编译。只需将您的.exe和.pdb转移到Linux机器上即可。而且您不会调试Linux应用程序。您正在调试确切的Windows应用程序。
丹·凯格尔

2
的确,使用真实的东西比than脚的克隆更好:D Love valgrind。
替代

11
真好!在Windows中,您可以运行一个运行linux的虚拟机,并在valgrind vm中的几乎vm wine中运行您的软件。如果Windows是从Windows
虚拟机中

15

对于Visual C ++,请尝试使用Visual Leak Detector。当我使用它时,它检测到来自new调用的内存泄漏,并在泄漏的源代码中返回了实际的行。最新版本可以在http://vld.codeplex.com/找到。


它似乎对我不起作用。我什至尝试创建一个简单的项目,除了分配一些内存而不释放它外,基本上什么也没做。VLD未检测到它。:-|
Synetech

@Synetech公司 我在VS2010中遇到了同样的问题...使用最新版本的VLD解决了我的问题
Relaxxx

14

您正在使用的Windows开发环境可能包含其自己的工具。例如,Visual Studio使您可以检测和隔离程序中的内存泄漏


6
它几乎没有实际用途。它将记录有问题的分配的文件名/行号,但仅当您直接调用malloc时才提供信息。使用new / delete时,它将无助地将new.h定位为“有害”代码。
user9665

3
它对我来说是正确的,即使使用了new / delete,也要指向正确的行。
罗德里戈

但是,如果分配了库函数,它将起作用吗?例如strdup。
Alex Budovski

1
Valdrind做了很多更然后查找内存泄漏,我主要用它来寻找使用释放,未初始化的栈和堆内存,可以非常努力,调试,否则的。
ideaman42 2011年

1
@ user9665视觉检漏仪( vld.codeplex.com)为每个内存泄漏提供了完整的调用堆栈,而源代码更改却最少。现场检查示例
KindDragon 2012年

14

我想列出一些工具,希望会有用

阅读本文以获得更多详细信息

  1. 净化
  2. 边界检查器
  3. Coverity(基本上是一个代码分析器,但是它将捕获静态的内存泄漏)
  4. 发光代码
  5. dmalloc
  6. ccmalloc
  7. 新泽西州
  8. 扬达
  9. 瓦尔格朗德
  10. 帕特罗
  11. 保险++




6

过去,我曾经有机会使用Compuware DevPartner Studio,这确实不错,但价格昂贵。较便宜的解决方案可以是GlowCode,我仅使用5.x版本,尽管附加了我需要调试的过程时出现了一些问题,但它运行良好。


昂贵的。它仅使用探查器片就在一个周末内偿还了款项。
EvilTeach



4

请参阅“ 软件质量检查测试和测试工具资源”页面上的“ 源测试工具 ”链接,以获取类似工具的列表。

我过去曾使用BoundsChecker,DevPartner Studio和Intel V-Tune进行分析。我最喜欢V-Tune;您可以模拟各种英特尔芯片组,这将为您提供有关如何针对该平台进行优化的提示。








2

如果使用Borland / CodeGear / Embarcadero C ++ Builder开发,则可以使用CodeGuard。


2

几乎所有Profiler都包括检查内存泄漏的情况,并在分配内存时向您显示堆栈。

我可以推荐Intels Parallel Inspector。使用简单,无需重新编译。试用版可运行30天。

GlowCodeAtromatedQA也包含此类功能。他们都提供免费试用。

Contrast中的Compuware DevPartner(又名BoundsChecker)需要减慢“乐器”的重新编译速度,并且在检查错误时应用程序的运行也会变慢。而且BoundsChecker根本无法使用64位evsrions。我们放弃了该工具。


2
我肯定会推荐glowcode。我过去曾使用它来查找我的应用程序正在调用的dll中的内存泄漏。
鲍勃

在我上一个工作场所使用DevPartner时,有人抱怨速度严重下降。他们会尽一切可能避免使用它,因为它会很慢。
2009年







1

我使用了Insure ++,它在发现c ++内存泄漏/损坏以及许多其他错误(如未初始化的变量,指针错误,字符串等)方面表现出色,还可以实现可视化的“代码覆盖率”和运行时内存使用率等。您的代码..您可以尝试使用它的跟踪版本..



1

您可以尝试对IBM Purify进行RuntimeChecker试用试用版。

一个免费的解决方案是在Visual Studio中使用以下代码:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

只需将其写在所有cpp文件的顶部即可。这将在停止调试运行时检测应用程序的内存泄漏,并在输出窗口中列出它们。双击内存泄漏行将高亮显示已分配但从未释放内存的行。这可能对您有帮助:http : //www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.