2009-06-27 67 views
11

有谁知道我在哪里可以找到C++它可以是在命令行或Eclipse插件在Windows和Linux上运行内存内存泄漏检测工具。我希望它很容易使用。最好不要覆盖new(),delete(),malloc()或free()。像GDB一样,如果它将在命令行中,但我不记得被用于检测内存泄漏。如果有一个单元测试框架可以自动执行此操作,那就太棒了。G ++多平台的内存泄漏检测工具

这个问题与其他问题类似(如Memory leak detection under Windows for GNU C/C++),但我觉得它是不同的,因为那些要求Windows的具体解决方案或有我想避免的解决方案。我觉得我在这里寻找更具体的东西。建议不必满足所有要求,但尽可能多的会很好。

谢谢。

编辑:由于这已经出现了,通过“覆盖”我的意思是任何需要我#include一个库或其他改变C++如何编译我的代码,如果它在运行时这样做,以便运行代码一个不同的环境不会影响任何好的东西。另外,不幸的是,我没有Mac,所以对此提出任何建议都是无益的,但谢谢你的尝试。我的桌面运行Windows(我已经安装了Linux,但我的双显示器无法使用它),我宁愿不在虚拟机中运行Linux,尽管这肯定是一种选择。我的笔记本电脑运行的是Linux,因此我可以在那里使用该工具,不过我绝对会选择坚持使用桌面电脑,因为屏幕空间非常适合保存所有设计文档和需求,而无需在桌面上移动太多。

注意:虽然我可能会尝试回答,我不会一个标记为接受,直到我已经试过的建议,这是令人满意的。

EDIT2:我不担心我的代码的跨平台兼容性,它仅使用C++库的命令行应用程序。

回答

10

Valgrind是你best friend。 Valgrind有一个用于日食的plugin。 “可悲的是”Valgrind不能在Windows上运行,但它可以在Mac OSX,* BSD和Linux上运行,所以我认为这是“多平台”。 :)

Valgrind的不“覆盖”新/删除/的malloc /免费的,但不是在编译过程中(这样你就不必重新编译如果这是你的意思)。它解释二进制文件,因此在测试过程中性能会受到一些影响。

0

MacOS X上有leaks工具(我不知道它是否存在于其他地方),我曾经在linux上使用过一种名为memprof的工具。还有valgrind可以在linux上运行,而且非常棒,但是性能有很大的提升,而且表面上是在macos上,但我还没有尝试过。

但我不知道窗口上有这样的工具。

1

对于32位应用程序,valgrind + wine可以成为Windows应用程序的工作解决方案。如果你的应用可以在没有任何改变的情况下在葡萄酒下运行,那么在valgrind + wine下运行它可以在我的(相当有限的)体验中运行。由于您的应用程序在Linux下运行,我猜想您的应用程序可能会在wine下运行(避免使用非常特定于Windows的代码,这在wine中尚未得到支持)。

+0

您的意思是使用Wine作为api实现在* nix上重新编译Windows应用程序? (我只是好奇) – olliej 2009-06-27 06:50:33

1

尽管你提到这不是优选的Boehm Garbage Collector可以用来检测内存泄漏。简而言之,如果垃圾收集器实际上正在运行,那么通常你会发生内存泄漏。 Mozilla使用这种方式来检测Firefox中的内存泄漏。

1

DUMA是一个跨平台的泄漏检测库,我用于我的许多项目。这很好,因为您不需要任何DUMA特定的头文件,而只需链接库中的链接,然后链接到包含内存分配例程的系统libc以及链接到libstdC++之后。

设置起来可能有些棘手,特别是在与C++项目一起使用时,但我认为这是值得投入的时间。它帮助我在发现了一些内存泄漏之前,我可能没有发现其他情况,以及一次我删除了两次分配的情况。

一个注意事项:如果您构建一个静态存档(在Windows上默认构建),它会更容易,因为它有助于减少实际上由漏泄运行时造成的“误报”。

0

在新版本的gcc中有一些东西叫泄漏消毒剂。您只需添加-fsanitize=leak即可编译命令。然后,你正常运行你的程序,最后,如果有任何泄漏,你会得到总结(当然在终端)。