我正在寻找Valgrind来帮助提高我的C编码/调试,当我发现它只适用于Linux时——我没有其他需要或兴趣将我的操作系统转移到Linux,所以我想知道是否有同样好的Windows程序。
当前回答
正如jakobengbloom2所指出的,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:
我最喜欢的是verysley (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上的免费工具有:
VMMap来自sysinternals: 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性能工具有一定程度的L2缓存丢失分析能力,但不像Cachegrind那么好和容易使用。
5. DRD:
我还没有在Windows上找到任何免费和强大的工具,我能找到的唯一一个稍微接近的免费工具是“锁定”检查器 AppVerifier: http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx
其他回答
我曾经有机会使用Compuware DevPartner Studio,那真的很好,但它相当昂贵。 一个更便宜的解决方案可以是GlowCode,我刚刚与一个5。X版本,尽管在附加到我需要调试的进程时出现了一些问题,但它运行得很好。
试试Intel的Inspector XE产品,它可以帮助您检测内存和线程问题:http://software.intel.com/en-us/articles/intel-inspector-xe/
Clang支持地址消毒插件(-faddress-sanitizer选项),它几乎可以检测到Valgrind可以发现的大多数错误(不支持检测未初始化的内存读取和内存泄漏)。请参阅本页与Valgrind和其他类似工具的比较。一个正式的Windows端口目前正在进行中,请参阅Windows ASan端口。
几个月前,我尝试自己在Windows上构建它,但放弃了,请看我的相关问题。如果你想再试一次,事情可能已经变得更好了。
用户模式转储堆(UMDH)实用程序与操作系统一起工作,分析特定进程的Windows堆分配。这是微软提供的一个很好的免费工具。这是一个小教程“如何使用Umdh.exe来查找内存泄漏”。
Boost Test库可以检测内存泄漏。
推荐文章
- int的最大值
- 如何将文件指针(file * fp)转换为文件描述符(int fd)?
- GIT克隆在windows中跨本地文件系统回购
- C“int”的大小是2字节还是4字节?
- 多维数组如何在内存中格式化?
- printf()和puts()在C语言中的区别是什么?
- 断言是邪恶的吗?
- 如何运行一个PowerShell脚本而不显示窗口?
- PowerShell:仅为单个命令设置环境变量
- 有效,但毫无价值的语法在开关情况下?
- 为什么这个Windows批处理文件只执行第一行,而在命令shell中执行所有三行?
- 如何在Visual Studio中找到堆栈跟踪?
- 环境变量存储在Windows注册表的哪里?
- 有一个好的Valgrind Windows的替代品吗?
- gcc在哪里查找C和c++头文件?