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

时间:2009-01-05 15:37:39

标签: c windows debugging memory-leaks valgrind

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

38 个答案:

答案 0 :(得分:117)

正如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性能分析工具是免费的,不是很容易使用,但如果您愿意花时间,可以完成工作。 http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx 下载: http://msdn.microsoft.com/en-us/performance/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性能工具具有一定级别的L2缓存未命中性能分析功能,但不如Cachegrind那么好且易于使用。

<强> 5。 DRD:

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

答案 1 :(得分:30)

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

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

还有记忆博士,请看   dynamorio.org/drmemory.html

答案 2 :(得分:29)

一些更好的商业工具:

答案 3 :(得分:15)

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

答案 4 :(得分:14)

您正在使用的Windows开发环境可能包含自己的工具。例如,Visual Studio允许您在程序中detect and isolate memory leaks

答案 5 :(得分:14)

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

请阅读此article了解更多详情

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

答案 6 :(得分:13)

尝试DUMA

答案 7 :(得分:12)

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

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

答案 8 :(得分:8)

结合Visual Studio,我通常使用Visual Leak Detector或简单的_CrtDumpMemoryLeaks(),这是一个win32 api调用。两者都没什么特别的,但他们完成了工作。

答案 9 :(得分:6)

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

答案 10 :(得分:6)

我有机会在过去使用Compuware DevPartner Studio,这真的很好,但它非常昂贵。 一个更便宜的解决方案可能是GlowCode,我只使用5.x版本,尽管在附加到我需要调试的过程中存在一些问题,但它运行得很好。

答案 11 :(得分:5)

Viusual Studio可以帮助检测内存泄漏。见Microsoft Visual C++ Tips and Tricks - &gt; “内存泄漏”部分。 另见post in SO

虽然只有使用Visual Studio的团队编辑才能进行实际跟踪。

答案 12 :(得分:4)

有关类似工具的列表,请参阅“软件质量保证测试和测试工具资源”页面上的“Source Test Tools”链接。

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

答案 13 :(得分:3)

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

答案 14 :(得分:3)

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

答案 15 :(得分:3)

Jochen Kalmbach's Memory Leak Detector符合资格吗?

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

答案 16 :(得分:3)

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

答案 17 :(得分:3)

Purify怎么样?

答案 18 :(得分:2)

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

答案 19 :(得分:2)

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

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

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

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

答案 20 :(得分:2)

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

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

他们正在将valgrind移植到Windows。可能在几年内我们将在窗户上有一个可靠的valgrind。

答案 21 :(得分:2)

我们刚刚为Windows完成Memory Safety checking tool处理GCC和Micrsoft Visual C(尚未使用C ++),并正在寻找Beta测试人员。

编辑2011年6月12日:不再测试,现在为GCC和Microsoft Visual Studio C制作。

答案 22 :(得分:2)

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

答案 23 :(得分:2)

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

答案 24 :(得分:2)

列表的另一种记忆工具:Memory Validator

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

答案 25 :(得分:2)

也许CodeSnitch会成为你追求的东西? http://www.entrek.com/codesnitch.html

答案 26 :(得分:1)

您可以查看“Game Programming Gems 8”一书中的文章Design and Implementation of an In-Game Memory Profiler

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

enter image description here

答案 27 :(得分:1)

Clang支持Address Sanitizer插件(-faddress-sanitizer选项),它几乎可以检测到Valgrind可以找到的大多数错误(但不支持检测未初始化的内存读取和内存泄漏)。有关Valgrind和其他类似工具的比较,请参阅this page。官方Windows端口目前正在进行中,请参阅Windows ASan port

我几个月前尝试在Windows上自己构建它并放弃,看看我的相关question。如果你想再试一次,事情可能会变得更好。

答案 28 :(得分:1)

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

您无需为DebugDiag工作提供程序。

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

虽然它不是最简单或最直观的程序!请确保您获取有关如何使用它的教程和说明。

答案 29 :(得分:1)

The user-mode dump heap (UMDH) utility与操作系统一起分析特定进程的Windows堆分配。这是从微软免费获得的一个非常好的工具。 Here是一个迷你教程“如何使用Umdh.exe查找内存泄漏”。

答案 30 :(得分:1)

您可以试用RuntimeChecker试用IBM Purify试用..

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

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

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

答案 31 :(得分:1)

您可能想要了解有关内存泄漏的Mozilla is doing。其工具箱中的一个工具是用作memory leak detector.

的Hans Boehm垃圾收集器

答案 32 :(得分:1)

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

答案 33 :(得分:1)

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

您可能希望在维基百科上查看this list

顺便说一句,我发现memwatch很有用。谢谢约翰!

答案 34 :(得分:1)

查看此问题:Is there a good Valgrind substitute for Windows?。虽然要求valgrind的一般替代品,但它主要讨论内存泄漏检测器而不是竞争条件检测。

答案 35 :(得分:0)

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

答案 36 :(得分:0)

答案 37 :(得分:0)