有没有一个很好的Valgrind替代Windows?
我正在调查Valgrind,以帮助改进我的C编码/debugging,当我发现它只用于Linux – 我没有其他需要或兴趣将我的操作系统移到Linux,所以我想知道是否有一个同样好的Windows程序。
一些更好的商业工具:
- 净化
- 保证++
正如jakobengblom2指出的,valgrind有一套工具。 根据哪一个你正在谈论有不同的窗口计数器部分。 我只会在这里提到OSS或免费工具。
1. MemCheck:
记忆博士 这是一个相对较新的工具,在Windows 7上效果很好。我最喜欢的function是在报告中将相同的泄漏分配堆栈分组。
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 )这是微小的,但非常有用和易于使用。
如果您需要更多function,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性能工具具有一定级别的二级高速caching未命中分析能力,但不如Cachegrind那么好用。
5. DRD:
在Windows上还没有find任何免费和function强大的,唯一免费的Windows工具,我可以find稍微接近AppVerifier中的“锁”检查器: http : //msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx
为什么不使用Valgrind + Wine来debugging你的Windows应用程序? 见http://wiki.winehq.org/Wine_and_Valgrind
(Chromium使用它来检查Windows版本的内存错误;请参阅build.chromium.org,查看实验或内存瀑布,并search葡萄酒。)
还有Dr. Memory,请参阅dynamorio.org/drmemory.html
对于Visual C ++,请尝试Visual Leak Detector 。 当我使用它时,它检测到来自new
调用的内存泄漏,并返回泄漏源代码中的实际行。 最新版本可以在http://vld.codeplex.com/find。;
您正在使用的Windows的开发环境可能包含自己的工具。 例如,Visual Studio可以检测和隔离程序中的内存泄漏
我想列举一些工具,希望会有用
阅读这篇文章的更多细节
- 净化
- 边界检查器
- Coverity(基本上它是一个代码分析器,但它会捕获静态内存泄漏)
- 辉光代码
- dmalloc
- ccmalloc
- NJAMD
- YAMD
- Valgrind的
- mpatrol
- 保证++
试试DUMA
Windows的debugging工具是Pageheap.exe的一部分。 它是免费的,基本上是一个自定义的内存分配器/释放器。
在Visual Studio中,我通常使用Visual Leak Detector或简单的_CrtDumpMemoryLeaks(),它是一个win32 API调用。 两者都不是什么幻想,但他们完成了工作。
过去我有机会使用Compuware DevPartner Studio ,那真的很不错,但是相当昂贵。 一个更便宜的解决scheme可能是GlowCode ,我刚刚使用了5.x版本,尽pipe在附加到我需要debugging的过程中出现了一些问题,但它工作得很好。
我一直喜欢来自一家名为Software Verification的公司的Memory Validator 。
Viusual Studio可以帮助检测内存泄漏本身。 请参阅Microsoft Visual C ++提示和技巧 – >“内存泄漏”部分。 请参阅SO中的这篇文章
尽pipe只有Visual Studio的Team Edtion才能进行真正的跟踪。
请参阅“软件质量检查和testing工具资源”页面上的“ 源testing工具 ”链接,以获取类似工具的列表。
过去我使用BoundsChecker,DevPartner Studio和Intel V-Tune进行性能分析。 我最喜欢V-Tune; 你可以模拟各种英特尔芯片组,它会给你提示如何优化该平台。
Jochen Kalmbach的内存泄漏检测器是否合格?
PS:最新版本的URL被埋在文章的评论主题的某处。
LeakDiag,UMDH,App Verifier,DebugDiag,都是提高代码健壮性和查找内存泄漏的有用工具。
Boosttesting库可以检测内存泄漏。
如何净化 ?
尝试使用英特尔的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。
或多或less所有Profiler包括检查内存泄漏,并显示内存分配时的堆栈。
我可以推荐英特尔Parallel Inspector 。 简单易用,无需重新编译。 试用版运行30天。
GlowCode和AtromatedQA也包含这些function。 他们都提供免费试用。
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 ++),并且正在寻找Betatesting者。
编辑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 ++内存泄漏/损坏和许多其他错误(如未初始化的variables,指针错误,string等等)方面做得非常出色,它还可视化“代码覆盖率”和运行时内存使用率等。你的代码..你可以尝试它的线索版本..
您可能想要阅读Mozilla 在内存泄漏方面正在做的事情 。 其工具箱中的一个工具是用作内存泄漏检测器的Hans Boehm垃圾回收器。
您可以尝试将RuntimeChecker试用到IBM Purify试用版。
免费的解决scheme是在Visual Studio中使用以下代码:
#ifdef _DEBUG #define new DEBUG_NEW #endif
只需在您所有的cpp文件的顶部写这个。 当停止debugging运行并将它们列在输出窗口中时,这将检测到应用程序的内存泄漏。 双击一条内存泄漏线将会使内存分配的线路永不释放。 这可能会帮助你: http : //www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml