有一个很好的Valgrind替代Windows吗?

Dra*_*ake 210 c windows debugging valgrind memory-leaks

当我发现它仅适用于Linux时,我正在研究Valgrind以帮助改进我的C编码/调试 - 我没有其他需要或兴趣将我的操作系统转移到Linux所以我想知道是否有一个同样好的Windows程序.

Lai*_*hen 117

正如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

  • 还有[gperftools(以前称为Google PerfTools)](http://code.google.com/p/gperftools/).它不是valgrind的替代品(实际上是什么),但它有一个新的malloc,cpu profiler,堆分析器和检查器.值得一看,因为它支持Linux和Windows(包括Mingw)和其他unices. (2认同)

Dan*_*gel 30

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

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

还有Memory博士,请参阅dynamorio.org/drmemory.html

  • 无需重新编译Wine.只需将.exe和.pdb转移到Linux机器上即可.你不会调试Linux应用程序; 你正在调试你的确切Windows应用程序. (33认同)
  • 太好了!从Windows可以运行运行linux的虚拟机,在valgrind vm中运行几乎vm葡萄酒中的软件.如果windows是从windows vm中运行linux的vm运行的,那么奖励积分:) (11认同)
  • 因为那时你不会调试Windows应用程序 - 你将调试Linux应用程序. (3认同)
  • 确切地说,使用真实的东西比使用蹩脚的克隆更好:D Love valgrind. (2认同)

ori*_*rip 29

一些更好的商业工具:

  • Insure ++将永远用于检测代码,并永远在运行时执行代码. (2认同)

小智 15

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


dmi*_*gov 14

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

  • 它几乎没有实际用途.它将记录文件名/亚麻,以便进行违规分配,但如果您直接调用malloc,则仅提供信息.当使用new/delete时,它将无益地将new.h定位为"违规"代码. (6认同)
  • 它对我来说正常工作,指向正确的行,甚至使用new/delete. (3认同)

Sat*_*bir 14

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

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

  1. 净化
  2. Bounds Checker
  3. Coverity(基本上是它的代码分析器,但它会在静态中捕获内存泄漏)
  4. 发光代码
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind的
  10. mpatrol
  11. 保证++


Dia*_*ami 13

试试DUMA


小智 12

Windows的调试工具有Pageheap.exe部分.它是免费的,基本上是一个自定义内存分配器/解除分配器.

请参见http://support.microsoft.com/kb/286470


Jas*_*ers 8

与Visual Studio结合使用时,我通常使用Visual Leak Detector或简单的_CrtDumpMemoryLeaks()这是一个win32 api调用.两者都没什么特别的,但他们完成了工作.


Man*_*uel 6

我有机会在过去使用Compuware DevPartner Studio,这非常好,但它非常昂贵.一个更便宜的解决方案可能是GlowCode,我刚刚使用5.x版本,尽管在附加到我需要调试的过程中存在一些问题,但它工作得很好.


ste*_*vex 6

我一直喜欢来自一家名为Software Verification的公司的Memory Validator.


fmu*_*cke 5

Viusual Studio可以帮助检测内存泄漏.请参阅Microsoft Visual C++提示和技巧 - >"内存泄漏"部分.另见SO中的这篇文章

虽然只有Visual Studio的Team Edtion才能实现真正的跟踪.