我正在寻找Valgrind来帮助提高我的C编码/调试,当我发现它只适用于Linux时——我没有其他需要或兴趣将我的操作系统转移到Linux,所以我想知道是否有同样好的Windows程序。
有关类似工具的列表,请参阅软件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/找到。
new
净化呢?
看看这个问题:有一个好的Valgrind Windows的替代品吗?。虽然提出了valgrind的通用替代品,但它主要讨论内存泄漏检测器,而不是竞态条件检测。
绝对净化!我用它来分析一些大型代码库(>3,000 kSLOC),发现它非常出色。
你可能想在维基百科上看看这个列表。
顺便说一下,我发现memwatch是有用的。谢谢约翰!
虽然真正的跟踪只能与Visual Studio的团队版。
所有分析器或多或少都包括检查内存泄漏,并在分配内存时显示堆栈。
我可以推荐英特尔并行检查器。使用简单,不需要重新编译。试运行期为30天。
GlowCode和AtromatedQA也包含这样的功能。他们都提供免费试用。
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
我想列举一些工具,希望对大家有用
阅读文章获取更多细节
用户模式转储堆(UMDH)实用程序与操作系统一起工作,分析特定进程的Windows堆分配。这是微软提供的一个很好的免费工具。在这里是一个迷你教程“如何使用Umdh.exe来查找内存泄漏”。
(铬使用这个来检查Windows版本的内存错误;看到 build.chromium.org 看看实验或记忆瀑布,并寻找葡萄酒。)
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库可以检测内存泄漏。
只是一个想法,您还可以实现一个内存分配器,并跟踪所有对malloc和free的调用。然而,这对于某些项目来说可能太多了。
Parasoft insur++一直是可靠的:
http://www.parasoft.com/jsp/products/insure.jsp?itemId=63
我们正在为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。
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:
你可以参考《Game Programming Gems 8》一书中的文章游戏内存分析器的设计与实现。
它展示了如何实现一个低开销的半侵入式实时内存分析器,源代码在CD-ROM中提供。
试试Intel的Inspector XE产品,它可以帮助你检测内存和线程问题:http://software.intel.com/en-us/articles/intel-inspector-xe/
我今天发现了这个SF项目:
http://sourceforge.net/p/valgrind4win/wiki/Home/
他们正在将valgrind移植到Windows。也许几年后,我们的窗户就会有可靠的耐磨材料了。
查找Windows上c++应用程序中的内存泄漏
Clang支持地址消毒插件(-faddress-sanitizer选项),它几乎可以检测到Valgrind可以发现的大多数错误(不支持检测未初始化的内存读取和内存泄漏)。请参阅这个页面以与Valgrind和其他类似工具进行比较。一个正式的Windows移植目前正在进行中,请参见Windows ASan端口。
我试图自己在Windows上构建它几个月前,放弃了,看到我相关的问题。如果你想再试一次,事情可能已经变得更好了。