当我发现Valgrind仅适用于Linux时,我正在研究Valgrind,以帮助改善C编码/调试-我对将OS迁移至Linux没有其他需求或兴趣,因此我想知道是否有同样好的Windows程序。
当我发现Valgrind仅适用于Linux时,我正在研究Valgrind,以帮助改善C编码/调试-我对将OS迁移至Linux没有其他需求或兴趣,因此我想知道是否有同样好的Windows程序。
Answers:
正如jakobengblom2指出的那样,valgrind有一套工具。根据您在说的是哪一个,Windows计数器部件不同。我只会在这里提及OSS或免费工具。
1. MemCheck:
记忆博士。它是一个相对较新的工具,在Windows 7上可以很好地工作。我最喜欢的功能是,它在报告中将相同的泄漏分配堆栈进行分组。
http://code.google.com/p/drmemory/
我还使用了UMDH(http://support.microsoft.com/kb/268343),发现它非常有用且易于安装。它适用于Win2000到Win7。
AppVerifier是Windows本机代码开发人员必不可少的工具,它的“内存”检查器可以完成类似的工作 http://msdn.microsoft.com/zh-cn/library/dd371695%28v=vs.85%29.aspx
2. Callgrind:
我最喜欢的是verysleepy(http://www.codersnotes.com/sleepy)它很小,但是非常有用并且易于使用。
如果您需要更多功能,则可以免费使用AMD CodeAnalyst™Performance Analyzer: http //developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx
Windows Performance Analysis工具是Microsoft提供的免费工具,使用起来不是很容易,但是如果您愿意花时间的话,可以完成工作。http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx 下载:http : //msdn.microsoft.com/zh-cn/performance / cc752957
3.地块:
Windows上类似(不太完全匹配)的免费工具是:
来自sysinternals的VMMap:http : //technet.microsoft.com/zh-cn/sysinternals/dd535533
!windbg中的!heap命令:http : //hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html
4. Cachegrind:
上面提到的Windows Performance Tools具有一定级别的L2缓存未中分析功能,但是不如Cachegrind那样好用。
5. DRD:
在Windows上还没有发现任何免费且功能强大的东西,我能找到的唯一接近Windows的免费工具是AppVerifier中的“锁定”检查器:http : //msdn.microsoft.com/zh-cn/library /dd371695%28v=vs.85%29.aspx
为什么不使用Valgrind + Wine调试Windows应用程序?参见 http://wiki.winehq.org/Wine_and_Valgrind
(Chromium使用它来检查Windows版本是否存在内存错误;请访问build.chromium.org并查看实验性或内存瀑布,并搜索wine。)
还有Dr. Memory,请参阅dynamorio.org/drmemory.html
对于Visual C ++,请尝试使用Visual Leak Detector。当我使用它时,它检测到来自new
调用的内存泄漏,并在泄漏的源代码中返回了实际的行。最新版本可以在http://vld.codeplex.com/找到。
Windows的调试工具中有Pageheap.exe的一部分。它是免费的,并且基本上是一个自定义内存分配器/释放器。
gflags
+ gdb
(来自mingw)有助于诊断。
与Visual Studio结合使用时,我通常使用Visual Leak Detector或仅使用_CrtDumpMemoryLeaks(),这是win32 api调用。两者都不花哨,但他们完成了工作。
过去,我曾经有机会使用Compuware DevPartner Studio,这确实不错,但价格昂贵。较便宜的解决方案可以是GlowCode,我仅使用5.x版本,尽管附加了我需要调试的过程时出现了一些问题,但它运行良好。
我一直喜欢一家名为Software Verification的公司的Memory Validator。
Viusual Studio可以帮助自己检测内存泄漏。请参阅Microsoft Visual C ++技巧和窍门 ->“内存泄漏”部分。另请参阅这篇文章
尽管只有使用Visual Studio的Team Edtion才可以进行真正的跟踪。
PS:最新版本的URL埋在文章的注释线程中。
LeakDiag,UMDH,App Verifier,DebugDiag等都是有用的工具,它们可以提高代码的健壮性并查找内存泄漏。
怎么样的净化?
尝试使用英特尔的Inspector XE产品,该产品可以帮助您检测内存和线程问题:http : //software.intel.com/zh-cn/articles/intel-inspector-xe/
也许CodeSnitch会是您所追求的?http://www.entrek.com/codesnitch.html
几乎所有Profiler都包括检查内存泄漏的情况,并在分配内存时向您显示堆栈。
我可以推荐Intels Parallel Inspector。使用简单,无需重新编译。试用版可运行30天。
GlowCode和AtromatedQA也包含此类功能。他们都提供免费试用。
Contrast中的Compuware DevPartner(又名BoundsChecker)需要减慢“乐器”的重新编译速度,并且在检查错误时应用程序的运行也会变慢。而且BoundsChecker根本无法使用64位evsrions。我们放弃了该工具。
我曾经使用过的最好的工具是DevPartner BoundsChecker-它不是免费的,但是有一个评估期。
列表中的另一个存储工具:Memory Validator。
它不是免费的,但远没有Purify或Boundschecker昂贵。
如果您不担心mingw,这里有一些链接(某些链接可能适用于MSVC)... http://betterlogic.com/roger/?p=1140
我今天发现了这个SF项目:
http://sourceforge.net/p/valgrind4win/wiki/Home/
他们正在将valgrind移植到Windows。可能几年后,我们将在窗户上安装可靠的valgrind。
看看这个问题:是否有Windows的Valgrind替代品?。尽管要求使用valgrind的通用替代方法,但它主要讨论内存泄漏检测器,而不是竞争条件检测。
您可以尝试对IBM Purify进行RuntimeChecker试用试用版。
一个免费的解决方案是在Visual Studio中使用以下代码:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
只需将其写在所有cpp文件的顶部即可。这将在停止调试运行时检测应用程序的内存泄漏,并在输出窗口中列出它们。双击内存泄漏行将高亮显示已分配但从未释放内存的行。这可能对您有帮助:http : //www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml