提问人:Drake 提问时间:1/5/2009 最后编辑:KindDragonDrake 更新时间:1/24/2013 访问量:396111
有没有好的 Valgrind 替代品来替代 Windows?
Is there a good Valgrind substitute for Windows?
问:
当我发现它仅适用于 Linux 时,我正在研究 Valgrind 以帮助改进我的 C 编码/调试 - 我没有其他需要或兴趣将我的操作系统迁移到 Linux,所以我想知道是否有同样好的程序适用于 Windows。
答:
我过去曾有机会使用 Compuware DevPartner Studio,这真的很好,但它非常昂贵。 更便宜的解决方案可能是 GlowCode,我刚刚使用了 5.x 版本,尽管在附加到我需要调试的进程时存在一些问题,但它运行良好。
评论
有关类似工具的列表,请参阅软件 QA 测试和测试工具资源页面上的“源测试工具”链接。
我过去曾使用 BoundsChecker、DevPartner Studio 和英特尔 V-Tune 进行性能分析。我最喜欢 V-Tune;您可以模拟各种英特尔芯片组,它会为您提供有关如何针对该平台进行优化的提示。
也许 CodeSnitch 会是你所追求的?http://www.entrek.com/codesnitch.html
我一直很喜欢Memory Validator,它来自一家名为Software Verification的公司。
您正在使用的 Windows 开发环境可能包含自己的工具。例如,Visual Studio 允许您检测和隔离程序中的内存泄漏
评论
一些更好的商业工具:
评论
Windows调试工具中有Pageheap.exe部分。它是免费的,基本上是一个自定义内存分配器/释放器。
查看 http://support.microsoft.com/kb/286470
评论
gflags
gdb
如果您使用Borland/CodeGear/Embarcadero C++ Builder进行开发,则可以使用CodeGuard。
试用 DUMA
对于 Visual C++,请尝试 Visual Leak Detector。当我使用它时,它检测到调用中的内存泄漏,并在泄漏的源代码中返回实际行。最新版本可在 http://vld.codeplex.com/ 上找到。new
评论
净化怎么样?
评论
看看这个问题: 有没有一个好的 Valgrind 替代品来替代 Windows?.虽然提出了 valgrind 的一般替代品,但它主要讨论内存泄漏检测器,而不是竞争条件检测。
绝对净化!我用它来分析一些庞大的代码库(>3,000 kSLOC),发现它非常出色。
你可能想在维基百科上查看这个列表。
顺便说一句,我发现 memwatch 很有用。谢谢约翰!
Viusual Studio 可以帮助检测内存泄漏本身。请参阅Microsoft Visual C++ Tips and Tricks -> “内存泄漏”部分。 另请参阅SO中的这篇文章
尽管只有使用 Visual Studio 的 Team Edtion 才能进行真正的跟踪。
或多或少,所有 Profiler 都包括检查内存泄漏,并在分配内存时显示堆栈。
我可以推荐英特尔的 Parallel Inspector。简单易用,无需重新编译。试用版的有效期为 30 天。
GlowCode 和 AtromatedQA 也包含此类功能。他们都提供免费试用。
相比之下,Compuware DevPartner(又名 BoundsChecker)需要放慢速度的“检测”重新编译,并且应用程序在检查错误时也会运行得更慢。而且 BoundsChecker 根本无法与 64 位 evsrions 一起使用。我们放弃了这个工具。
评论
我使用了 Insure++,它在查找 c++ 内存泄漏/损坏和许多其他错误(如未初始化的变量、指针错误、字符串等)方面做得非常出色,它还具有视觉“代码覆盖率”和运行时内存使用情况等。这让你的代码更有信心。您可以尝试试用试用版。.
结合 Visual Studio,我通常使用 Visual Leak Detector 或简单的 _CrtDumpMemoryLeaks(),这是一个 win32 api 调用。两者都没什么花哨的,但它们可以完成工作。
我用过的最好的工具是 DevPartner BoundsChecker - 它不是免费的,但它有一个评估期。
您可能想了解Mozilla在内存泄漏方面所做的工作。他们工具箱中的一个工具是用作内存泄漏检测器的 Hans Boehm 垃圾收集器。
您可以尝试 RuntimeChecker 试用版或 IBM Purify 试用版。
一个免费的解决方案是在 Visual Studio 中使用以下代码:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
只需将其写在所有 cpp 文件的顶部即可。 这将在停止调试运行时检测应用程序的内存泄漏,并在输出窗口中列出它们。双击内存泄漏行将突出显示分配内存且永不释放的行。这可能对您有所帮助:http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml
我想列出一些工具,希望有用
阅读本文了解更多详情
- 净化
- 边界检查器
- Coverity(基本上它是一个代码分析器,但它会在静态中捕获内存泄漏)
- 发光代码
- 德马洛克
- ccmalloc
- NJAMD的
- YAMD公司
- 瓦尔格林德
- mpatrol
- 投保++
用户模式转储堆 (UMDH) 实用工具与操作系统配合使用,以分析特定进程的 Windows 堆分配。这是Microsoft免费提供的一个非常好的工具。这是一个迷你教程“如何使用 Umdh.exe 查找内存泄漏”。
为什么不使用 Valgrind + Wine 来调试 Windows 应用呢?查看 http://wiki.winehq.org/Wine_and_Valgrind
(Chromium 使用它来检查 Windows 版本是否存在内存错误;请参阅 build.chromium.org 看看实验或记忆瀑布,寻找葡萄酒。
还有记忆博士,见 dynamorio.org/drmemory.html
评论
Jochen Kalmbach 的内存泄漏检测器是否合格?
PS:最新版本的 URL 隐藏在文章评论线程中的某个地方。
免费工具 DebugDiag 将帮助查找内存并处理泄漏。
无需设置程序即可使 DebugDiag 正常工作。
虽然它不是最简单或最直观的程序!确保你在谷歌上搜索有关如何使用它的教程和说明。
您列表中的另一个记忆工具:Memory Validator。
不是免费的,但远不如 Purify 或 Boundschecker 贵。
LeakDiag、UMDH、应用验证程序、DebugDiag 都是提高代码可靠性和查找内存泄漏的有用工具。
Boost Test 库可以检测内存泄漏。
如果你不害怕mingw,这里有一些链接(有些可能与MSVC一起使用)...http://betterlogic.com/roger/?p=1140
只是一个想法,您还可以实现内存分配器并跟踪对 malloc 和 free 的所有调用。但是,对于某些项目来说,这可能太多了。
评论
Parasoft Insure++ 一直很可靠:
http://www.parasoft.com/jsp/products/insure.jsp?itemId=63
我们刚刚完成了Windows的内存安全检查工具,该工具可以处理GCC和Micrsoft Visual C(还不是C++),并且正在寻找Beta测试人员。
编辑 2011 年 6 月 12 日:不再是 Beta,现在是 GCC 和 Microsoft Visual Studio C 的生产。
正如 jakobengblom2 所指出的,valgrind 有一套工具。根据您所说的,有不同的窗口计数器部件。我在这里只提到OSS或免费工具。
1. 内存检查:
记忆博士。这是一个相对较新的工具,在 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. 呼叫研磨:
我最喜欢的是 veryrowy ( http://www.codersnotes.com/sleepy ) 它很小,但非常有用且易于使用。
如果您需要更多功能,AMD CodeAnalyst™ 性能分析器是免费的: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx
Windows 性能分析工具是 Microsoft 免费提供的,不是很容易使用,但如果您愿意花时间,可以完成工作。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 中的 !heap 命令:http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html
4. 缓存研磨:
上面提到的 Windows 性能工具具有一定程度的 L2 缓存未命中分析功能,但不如 Cachegrind 那么好和易于使用。
5. DRD:
还没有在 Windows 上找到任何免费且功能强大的工具,我能找到的唯一一个稍微接近的 Windows 免费工具是“锁定”检查器 AppVerifier:http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx
评论
您可以查看《Game Programming Gems 8》一书中的 Design and Implementation of an In-Game Memory Profiler 一文。
它演示了如何实现低开销半侵入式实时内存分析器,源代码在 CD-ROM 中提供。
试试英特尔的 Inspector XE 产品,它可以帮助您检测内存和线程问题: http://software.intel.com/en-us/articles/intel-inspector-xe/
我今天发现了这个SF项目:
http://sourceforge.net/p/valgrind4win/wiki/Home/
他们正在将 valgrind 移植到 Windows。可能在几年内,我们将在窗户上拥有可靠的 valgrind。
Clang 支持 Address Sanitizer 插件(-faddress-sanitizer 选项),它几乎可以检测 Valgrind 可以找到的大多数错误(但还不支持检测未初始化的内存读取和内存泄漏)。请参阅此页面,了解与 Valgrind 和其他类似工具的比较。官方 Windows 端口目前正在进行中,请参阅 Windows ASan 端口。
几个月前,我试图在 Windows 上自己构建它并放弃了,请参阅我的相关问题。如果你想再试一次,现在情况可能会变得更好。
评论