有没有适用于Windows的好的Valgrind替代品?

210

当我在寻找帮助改进我的C语言编程和调试的工具时,我发现Valgrind仅适用于Linux操作系统。由于我没有将操作系统转移到Linux的其他需要或兴趣,因此我想知道是否有同样优秀的程序适用于Windows。


你想要进行哪种类型的调试?Valgrind是一个非常丰富的工具集,下面的答案指向各种不同的方向。重点在于内存泄漏/分配调试。 - jakobengblom2
1
也许你可以在 Windows 环境内的虚拟 Linux 机器上测试代码,只有在需要检查时才这么做。你可以在虚拟和非虚拟机之间共享开发文件夹。前提是,如果代码足够可移植。 - Liran Orevi
38个回答

1

我使用了 Insure++,它在查找 C++ 内存泄漏/破坏以及许多其他错误方面表现出色,如未初始化变量、指针错误、字符串等。它还提供可视化的“代码覆盖率”和运行时内存使用情况等功能,这些功能可以增强您对代码的信心。您可以尝试试用版本。


1

你可能想了解一下Mozilla关于内存泄漏的做法。他们工具箱中的一个工具是Hans Boehm垃圾收集器,被用作内存泄漏检测器。


1

您可以尝试使用RuntimeChecker试用版或IBM Purify试用版。

一个免费的解决方案是在Visual Studio中使用以下代码:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

只需在所有的cpp文件的顶部写入以下代码即可。这将检测您的应用程序中的内存泄漏,并在输出窗口中列出它们。双击内存泄漏行将突出显示分配内存但从未释放的行。这可能会对您有所帮助:http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

1

1

Clang支持地址Sanitizer插件(-faddress-sanitizer选项),它可以几乎检测到Valgrind可以发现的大多数错误(尽管目前不支持检测未初始化的内存读取和内存泄漏)。请参见this page,了解与Valgrind和其他类似工具的比较。官方的Windows端口目前正在进行中,请参见Windows ASan port

我在几个月前尝试在Windows上自己构建它,但最终放弃了,请参见我的相关question。如果您想再试一次,事情可能已经变得更好了。


0

0

只是一个想法,您也可以实现一个内存分配器并跟踪所有对malloc和free的调用。不过这可能对某些项目来说太过于繁琐。


这就是大多数游戏的做法。但这是一个巨大的工作量和许多仪器设备。 - Crashworks


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接