有谁知道我在哪里可以找到C ++的内存泄漏检测工具,它可以在命令行中运行,也可以在Windows和Linux中作为Eclipse插件运行。我希望它易于使用。最好不要覆盖new(),delete(),malloc()或free()。像GDB一样,如果它将在命令行中,但我不记得用于检测内存泄漏。如果有一个单元测试框架自动执行此操作,那就太棒了。
这个问题类似于其他问题(例如Memory leak detection under Windows for GNU C/C++)但是我觉得它有所不同,因为那些人要求提供特定于Windows的解决方案,或者有我宁愿避免的解决方案。我觉得我在寻找一些更具体的东西。建议不必满足所有要求,但尽可能多的是好的。
感谢。
编辑:由于这已经出现,“覆盖”是指任何需要我#include一个库或者改变C ++如何编译我的代码的东西,如果它在运行时这样做,那么运行代码不同的环境不会影响任何伟大的事情。另外,遗憾的是,我没有Mac,所以对此的任何建议都没有用,但谢谢你的尝试。我的桌面运行Windows(我安装了Linux但我的双显示器无法使用它)而且我宁愿不在VM中运行Linux,尽管这当然是一种选择。我的笔记本电脑运行Linux,所以我可以在那里使用该工具,虽然我肯定更喜欢坚持我的桌面,因为屏幕空间非常适合保持所有设计文档和要求,而不必在桌面上移动太多注意:虽然我可能会尝试回答,但在我尝试过这个建议之前,我不会将其标记为已接受。
EDIT2:我并不担心代码的跨平台兼容性,它只是一个使用C ++库的命令行应用程序。
答案 0 :(得分:10)
Valgrind是您的best friend。 Valgrind对于日食有plugin。 “可悲的是”Valgrind不在Windows上运行,但它运行在Mac OSX,* BSD和Linux上,所以我认为这是“多平台”。 :)
Valgrind会“覆盖”new / delete / malloc / free,但不会在编译期间(因此,如果这是你的意思,你不必重新编译)。它解释了二进制文件,因此在测试期间性能会受到一些影响。
答案 1 :(得分:1)
对于32位应用程序,valgrind + wine也可以作为Windows应用程序的工作解决方案。如果你的应用程序可以在没有任何变化的情况下在wine下运行,那么在valgrind + wine下运行它可以很好地完成我的(非常有限的)体验。由于你的应用程序在Linux下工作,我猜你的应用程序可能会在wine下运行(避免使用非常特定于Windows的代码,而葡萄酒尚不支持)。
答案 2 :(得分:1)
虽然您提到这不是首选,但Boehm Garbage Collector可用于检测内存泄漏。简单地说,如果垃圾收集器实际上正在运行,那么通常你会有内存泄漏。 Mozilla以这种方式使用它来检测Firefox中的内存泄漏。
答案 3 :(得分:1)
DUMA是一个跨平台的泄漏检测库,我将其用于许多项目。这很好,因为您没有#include
任何特定于DUMA的标头,而只是在链接到系统的libc(包含内存分配例程)之前以及链接到libstdc ++之后链接到库中。
设置起来可能有点棘手,尤其是在与C ++项目一起使用时,但我认为投入的时间非常值得。它帮助我找到了一些内存泄漏之前我可能没有发现其他情况,以及一个我删除了两次分配的情况。
一个注意事项:如果您构建静态存档(在Windows上默认构建)会更容易,因为它有助于减少实际上由漏洞运行时引起的“误报”。
答案 4 :(得分:0)
MacOS X上有leaks
工具(我不知道它是否存在于其他地方),我曾经在linux上使用过一个名为memprof的工具。还有valgrind可以在linux上工作,并且非常棒,但是性能大幅下降,表面上是macos但我还没有尝试过。
然而,我并不知道Windows上的任何此类工具。
答案 5 :(得分:0)
在较新版本的gcc中,有一种叫做泄漏消毒剂的东西。您只需要将-fsanitize=leak
添加到编译命令。然后你正常运行你的程序,最后,如果有任何泄漏,你会得到摘要(当然在终端)。