有没有一个很好的Valgrind替代Windows?

我正在调查Valgrind,以帮助改进我的C编码/debugging,当我发现它只用于Linux – 我没有其他需要或兴趣将我的操作系统移到Linux,所以我想知道是否有一个同样好的Windows程序。

一些更好的商业工具:

  • 净化
  • 保证++

正如jakobengblom2指出的,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

2. Callgrind:

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

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

Windows性能分析工具从Microsoft免费,不是很容易使用,但可以完成工作,如果你愿意花时间。 http://blogs.microsoft.com/zh-CN/performance_toolkit.aspx下载地址: http : //blogs.microsoft.com/zh-cn/performance-toolkit.aspx / cc752957

3.地块:

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

来自sysinternals的VMMap: http : //technet.microsoft.com/en-us/sysinternals/dd535533

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

4. Cachegrind:

上面提到的Windows性能工具具有一定级别的二级高速缓存未命中分析能力,但不如Cachegrind那么好用。

5. DRD:

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

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

(Chromium使用它来检查Windows版本的内存错误;请参阅build.chromium.org,查看实验或内存瀑布,并搜索葡萄酒。)

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

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

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

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

阅读这篇文章的更多细节

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

试试DUMA

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

请参阅http://support.microsoft.com/kb/286470

在Visual Studio中,我通常使用Visual Leak Detector或简单的_CrtDumpMemoryLeaks(),它是一个win32 API调用。 两者都不是什么幻想,但他们完成了工作。

过去我有机会使用Compuware DevPartner Studio ,这真的很不错,但是相当昂贵。 一个更便宜的解决方案可能是GlowCode ,我刚刚使用了5.x版本,尽管在附加到我需要调试的过程中出现了一些问题,但它工作得很好。

我一直喜欢来自一家名为Software Verification的公司的Memory Validator 。

Viusual Studio可以帮助检测内存泄漏本身。 请参阅Microsoft Visual C ++提示和技巧 – >“内存泄漏”部分。 请参阅SO中的这篇文章

尽管只有Visual Studio的Team Edtion才能进行真正的跟踪。

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

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

Jochen Kalmbach的内存泄漏检测器是否合格?

PS:最新版本的URL被埋在文章的评论主题的某处。

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

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

如何净化 ?

尝试使用英特尔的Inspector XE产品,它可以帮助您检测内存和线程问题: http : //software.intel.com/zh-cn/articles/intel-inspector-xe/

也许CodeSnitch会是你之后的东西? http://www.entrek.com/codesnitch.html

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

或多或少所有Profiler包括检查内存泄漏,并显示内存分配时的堆栈。

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

GlowCode和AtromatedQA也包含这些功能。 他们都提供免费试用。

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

我曾经使用的最好的工具是DevPartner BoundsChecker – 它不是免费的,但它有一个评估期。

您的清单的另一个记忆工具: Memory Validator 。

不是免费的,但远不及Purify或Boundschecker那样昂贵。

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

我们只是完成了Windows的内存安全检查工具 ,处理GCC和Micrsoft Visual C(而不是C ++),并且正在寻找Beta测试者。

编辑2011年6月12日:不再Beta,现在生产GCC和Microsoft Visual Studio C.

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

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

他们正在将valgrind移植到Windows。 可能几年之后,我们将在窗户上拥有可靠的valgrind。

看看这个问题: 是否有良好的Valgrind替代Windows? 虽然被问及valgrind的一般替代品,但主要讨论内存泄漏检测器,而不是竞态条件检测。

我使用了Insure ++,它在寻找c ++内存泄漏/损坏和许多其他错误(如未初始化的变量,指针错误,字符串等等)方面做得非常出色,它还具有可视化的“代码覆盖率”和运行时内存使用等等。你的代码..你可以尝试它的线索版本..

您可能想要阅读Mozilla 在内存泄漏方面正在做的事情 。 其工具箱中的一个工具是用作内存泄漏检测器的Hans Boehm垃圾回收器。

您可以尝试将RuntimeChecker试用到IBM Purify试用版。

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

 #ifdef _DEBUG #define new DEBUG_NEW #endif 

只需在您所有的cpp文件的顶部写这个。 当停止调试运行并将其列在输出窗口中时,这将检测到应用程序的内存泄漏。 双击一条内存泄漏线将会使内存分配的线路永不释放。 这可能会帮助你: http : //www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml