关于C#:有一个好的Valgrind替代Windows?

Is there a good Valgrind substitute for Windows?

当我发现它仅适用于Linux时,我正在研究Valgrind以帮助改进我的C编码/调试 - 我没有其他需要或兴趣将我的操作系统转移到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性能分析工具是免费的,不是很容易使用,但如果你愿意花时间,可以完成工作。 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中的堆命令: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


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

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

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


一些更好的商业工具:

  • 净化
  • 保证++


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


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


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

阅读这篇文章了解更多细节

  • 净化
  • Bounds Checker
  • Coverity(基本上是它的代码分析器,但它会在静态中捕获内存泄漏)
  • 发光代码
  • dmalloc
  • ccmalloc
  • NJAMD
  • YAMD
  • Valgrind的
  • mpatrol
  • 保证++

  • 试试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才能实现真正的跟踪。


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

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


    净化怎么样?


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

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


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


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


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


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


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


    如果你不害怕mingw,这里有一些链接(有些可能与MSVC一起工作)......

    valgrind memory checker for for mingw windows


    我们刚刚完成了Windows的内存安全检查工具,它可以处理GCC和Micrsoft Visual C(还没有C ++),并且正在寻找Beta测试人员。

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


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


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

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

    GlowCode和AtromatedQA也包括这样的功能。他们都提供免费试用。

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


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

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

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


    列表的另一个内存工具:Memory Validator。

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


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


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

    您可能希望在维基百科上查看此列表。

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


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


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

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

    1
    2
    3
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif

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


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

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


    用户模式转储堆(UMDH)实用程序与操作系统一起使用,以分析特定进程的Windows堆分配。这是从微软免费获得的一个非常好的工具。这是一个迷你教程"如何使用Umdh.exe查找内存泄漏"。


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

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

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

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


    您可以在"Game Programming Gems 8"一书中查看文章设计和实现游戏内存分析器。

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

    enter image description here


    您可能想要了解Mozilla在内存泄漏方面正在做些什么。其工具箱中的一个工具是用作内存泄漏检测器的Hans Boehm垃圾收集器。


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


    Parasoft Insure ++始终可靠:

    http://www.parasoft.com/jsp/products/insure.jsp?itemId=63


    在Windows上的C ++应用程序中查找内存泄漏