有一个好的Valgrind Windows的替代品吗?

我正在寻找Valgrind来帮助提高我的C编码/调试,当我发现它只适用于Linux时——我没有其他需要或兴趣将我的操作系统转移到Linux,所以我想知道是否有同样好的Windows程序。

378482 次浏览
我有机会在过去使用Compuware DevPartner Studio,这是非常好的,但它是相当昂贵的。 一个更便宜的解决方案可以GlowCode,我只是工作与5。X版本,尽管在附加到我需要调试的进程时出现了一些问题,但它运行得很好

有关类似工具的列表,请参阅软件QA测试和测试工具资源页面上的“源测试工具”链接。

我曾经使用BoundsChecker,DevPartner Studio和Intel V-Tune进行分析。我最喜欢V-Tune;你可以模拟各种英特尔芯片组,它会给你关于如何优化该平台的提示。

也许CodeSnitch是你想要的?http://www.entrek.com/codesnitch.html

我一直喜欢内存验证器,从一个公司叫软件验证。

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

一些好的商业工具:

Windows的调试工具中有Pageheap.exe部分。它是免费的,基本上是一个自定义的内存分配器/释放器。

看到http://support.microsoft.com/kb/286470

如果你使用Borland/CodeGear/Embarcadero c++ Builder进行开发,你可以使用CodeGuard。

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

看看这个问题:有一个好的Valgrind Windows的替代品吗?。虽然提出了valgrind的通用替代品,但它主要讨论内存泄漏检测器,而不是竞态条件检测。

绝对净化!我用它来分析一些大型代码库(>3,000 kSLOC),发现它非常出色。

你可能想在维基百科上看看这个列表

顺便说一下,我发现memwatch是有用的。谢谢约翰!

Viusual Studio可以帮助自己检测内存泄漏。参见微软Visual c++的技巧和技巧 ->“内存泄漏”部分。 另请参阅在SO中发帖

虽然真正的跟踪只能与Visual Studio的团队版。

所有分析器或多或少都包括检查内存泄漏,并在分配内存时显示堆栈。

我可以推荐英特尔并行检查器。使用简单,不需要重新编译。试运行期为30天。

GlowCodeAtromatedQA也包含这样的功能。他们都提供免费试用。

Compuware DevPartner(又名BoundsChecker)在对比中需要慢速的“仪器”重新编译,应用程序在检查错误时也会运行得更慢。和BoundsChecker不能工作与64位evsrions在所有。我们放弃了那个工具。

我使用了Insure++,它在查找c++内存泄漏/损坏和许多其他错误,如未初始化的变量,指针错误,字符串等方面做得很好,它还做了可视化的“代码覆盖”和运行时内存使用等。这让你对你的代码更有信心。你可以尝试一下试用版。

在与Visual Studio结合使用时,我通常使用视觉检漏仪或简单地使用_CrtDumpMemoryLeaks(),这是一个win32 api调用。两者都不花哨,但都能完成任务。

我用过的最好的工具是DevPartner BoundsChecker——它不是免费的,但它有一个评估期。

你可能想要阅读Mozilla 正在做的关于内存泄漏的内容。他们工具箱中的一个工具是用作内存泄漏检测器。的Hans Boehm垃圾收集器

你可以尝试RuntimeChecker试用,而不是IBM净化试用。

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

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
只要把这个写在你所有cpp文件的顶部。 这将在停止调试运行时检测应用程序的内存泄漏,并在输出窗口中列出它们。双击内存泄漏行将突出显示已分配内存且从未释放内存的行。这可能会帮助你:http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

我想列举一些工具,希望对大家有用

阅读文章获取更多细节

  1. 净化
  2. 边界检查
  3. Coverity(基本上它是一个代码分析器,但它会捕捉静态内存泄漏)
  4. 发光的代码
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. 确保+ +

用户模式转储堆(UMDH)实用程序与操作系统一起工作,分析特定进程的Windows堆分配。这是微软提供的一个很好的免费工具。在这里是一个迷你教程“如何使用Umdh.exe来查找内存泄漏”。

为什么不使用Valgrind + Wine来调试你的Windows应用程序?看到 http://wiki.winehq.org/Wine_and_Valgrind < / p >

(铬使用这个来检查Windows版本的内存错误;看到 build.chromium.org 看看实验或记忆瀑布,并寻找葡萄酒。)

这里还有个记忆博士 dynamorio.org/drmemory.html < / p >

Jochen Kalmbach的内存泄漏检测器符合条件吗?

注:最新版本的URL隐藏在文章的评论线程的某个地方。

免费工具DebugDiag将帮助查找内存并处理内存泄漏。

为了使DebugDiag工作,您不需要对程序进行配置。

http://www.microsoft.com/downloads/details.aspx?FamilyID=28BD5941-C458-46F1-B24D-F60151D875A3&displaylang=en

虽然它不是最简单或最直观的程序使用!确保你谷歌的教程和说明如何使用它。

列表中的另一个内存工具:内存验证器

不是免费的,但远没有Purify或Boundschecker那么贵。

LeakDiag, UMDH, App Verifier, DebugDiag都是提高代码健壮性和发现内存泄漏的有用工具。

Boost Test库可以检测内存泄漏。

如果你不害怕mingw,这里有一些链接(一些可能与MSVC工作)… http://betterlogic.com/roger/?p=1140 < / p >

只是一个想法,您还可以实现一个内存分配器,并跟踪所有对malloc和free的调用。然而,这对于某些项目来说可能太多了。

我们正在为Windows完成内存安全检查工具,它处理GCC和microsoft Visual C(还不是c++),并且正在寻找Beta测试人员。

2011年6月12日:不再是Beta版,现在是GCC和Microsoft Visual Studio C的产品版。

正如jakobengbloom2所指出的,valgrind有一套工具。根据你谈论的是哪一个,有不同的窗口柜台部分。这里我只提到OSS或免费工具。

1. MemCheck:

博士的记忆。这是一个相对较新的工具,在Windows 7上运行得很好。我最喜欢的特性是它在报告中对相同的泄漏分配堆栈进行分组。

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

我也使用过UMDH(http://support.microsoft.com/kb/268343),发现它非常有用,易于设置。它适用于Win2000到Win7。

AppVerifier是windows本地代码开发人员必须拥有的swissknife,它的“内存”检查器做类似的工作 http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx < / p >

2. Callgrind:

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

如果您需要更多的功能,AMD CodeAnalyst™性能分析器是免费的: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx < / p >

Windows性能分析工具是免费的微软,不是很容易使用,但可以完成工作,如果你愿意花时间。< a href = " http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit。aspx noreferrer“rel = > http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx 下载: http://msdn.microsoft.com/en-us/performance/cc752957 < / p >

3.地块:

类似的(不完全匹配)windows上的免费工具有:

VMMap from sysinternals: http://technet.microsoft.com/en-us/sysinternals/dd535533

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

4. Cachegrind:

上面提到的Windows性能工具有一定程度的L2缓存丢失分析能力,但不像Cachegrind那么好和容易使用。

5. DRD:

我还没有在Windows上找到任何免费且功能强大的工具,我能找到的唯一一个稍微接近的Windows免费工具是“锁定”检查器 AppVerifier: http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx < / p >

你可以参考《Game Programming Gems 8》一书中的文章游戏内存分析器的设计与实现

它展示了如何实现一个低开销的半侵入式实时内存分析器,源代码在CD-ROM中提供。

enter image description here

试试Intel的Inspector XE产品,它可以帮助你检测内存和线程问题:http://software.intel.com/en-us/articles/intel-inspector-xe/

我今天发现了这个SF项目:

http://sourceforge.net/p/valgrind4win/wiki/Home/

他们正在将valgrind移植到Windows。也许几年后,我们的窗户就会有可靠的耐磨材料了。

Clang支持地址消毒插件(-faddress-sanitizer选项),它几乎可以检测到Valgrind可以发现的大多数错误(不支持检测未初始化的内存读取和内存泄漏)。请参阅这个页面以与Valgrind和其他类似工具进行比较。一个正式的Windows移植目前正在进行中,请参见Windows ASan端口

我试图自己在Windows上构建它几个月前,放弃了,看到我相关的问题。如果你想再试一次,事情可能已经变得更好了。