当我发现它仅适用于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并查看实验或内存瀑布,并搜索wine.)
还有Memory博士,请参阅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才能实现真正的跟踪.