代码之家  ›  专栏  ›  技术社区  ›  mnuzzo

G++多平台内存泄漏检测工具

  •  11
  • mnuzzo  · 技术社区  · 17 年前

    有人知道我在哪里可以找到一个C++内存内存泄漏检测工具,它可以在命令行中运行,也可以在Windows和Linux中作为Eclipse插件运行。我希望它易于使用。最好是不覆盖new()、delete()、malloc()或free()的。类似GDB的东西,如果它在命令行中,但我不记得它被用来检测内存泄漏。如果有一个单元测试框架可以自动完成这项工作,那就太好了。

    Memory leak detection under Windows for GNU C/C++ )不过,我觉得这是不同的,因为那些要求windows特定的解决方案或有解决方案,我宁愿避免。我觉得我在找更具体的东西。建议不一定要满足所有的要求,但是尽可能多的建议就好了。

    谢谢。

    编辑:既然已经出现了,“重写”我指的是任何需要我包含库的东西,否则它会改变C++编译我的代码的方式,如果它在运行时这样做,那么在不同环境中运行代码不会影响任何伟大的事情。另外,不幸的是,我没有Mac电脑,所以任何关于这方面的建议都无济于事,但谢谢你的尝试。我的桌面运行Windows(我安装了Linux,但是我的双监视器不能使用它),我不想在VM中运行Linux,尽管这当然是一个选择。我的笔记本电脑运行Linux,所以我可以在那里使用这个工具,虽然我肯定更喜欢坚持我的桌面,因为屏幕空间非常适合保存所有的设计文档和需求,而不必在桌面上移动太多。

    注意:虽然我可以尝试答案,但在我尝试了建议并满意之前,我不会将其中一个标记为已接受。

    6 回复  |  直到 9 年前
        1
  •  11
  •   LiraNuna    17 年前

    Valgrind 是你的 best friend plugin 对于eclipse。 不幸的是,Valgrind没有在Windows上运行,但是它在macosx、*BSD和Linux上运行,所以我认为它是“多平台”的。:)

    Valgrind会“覆盖”new/delete/malloc/free,但在编译过程中不会这样做(因此如果这是您的意思的话,您不必重新编译)。它解释二进制文件,因此在测试期间性能会受到一些影响。

        2
  •  3
  •   bebidek    8 年前

    在较新版本的gcc中,有一种称为 防漏消毒剂 . 你只要加上 -fsanitize=leak

        3
  •  1
  •   David Cournapeau    17 年前

    对于32位应用程序,valgrind+wine也可以作为windows应用程序的工作解决方案。如果你的应用程序可以在wine下运行而不做任何更改,那么在valgrind+wine下运行它在我(相当有限)的经验中效果很好。由于你的应用程序是在Linux下运行的,我猜你的应用程序可能是在wine下运行的(避免了wine还不支持的特定于windows的代码)。

        4
  •  1
  •   codeincarnate    17 年前

    虽然你提到这不是首选 Boehm Garbage Collector

        5
  •  1
  •   Daniel Trebbien    16 年前

    DUMA 是一个跨平台的泄漏检测库,我在很多项目中都使用它。这很好,因为你不必这么做 #include 任何特定于DUMA的头,但只需在链接到系统的libc(包含内存分配例程)之前和链接到libstdc++之后在库中进行链接。

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

    注意:如果您构建一个静态存档(默认情况下在Windows上构建)会容易得多,因为它有助于减少由泄漏运行时实际引起的“误报”。

        6
  •  0
  •   olliej    17 年前

    这就是 leaks

    不过,我不知道windows上有这样的工具。