【问题标题】:G++ Multi-platform memory leak detection toolG++ 多平台内存泄漏检测工具
【发布时间】:2010-11-06 07:59:07
【问题描述】:

有谁知道我在哪里可以找到用于 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++ 库的命令行应用程序。

【问题讨论】:

    标签: c++ eclipse memory-management memory-leaks


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          对于 32 位应用程序,valgrind + wine 也可以作为 Windows 应用程序的有效解决方案。如果您的应用程序可以在没有任何更改的情况下在 wine 下运行,那么在 valgrind + wine 下运行它在我的(非常有限的)经验中效果很好。由于您的应用程序在 Linux 下运行,我猜您的应用程序很可能在 wine 下运行(避免 windows 尚不支持的特定于 windows 的代码)。

          【讨论】:

          • 您的意思是在 *nix 上使用 Wine 作为 api 实现重新编译 windows 应用程序? (我只是好奇)
          • valgrind 适用于 x86_64 以及 PowerPC、MIPS、ARM 和其他架构。
          • 不,我的意思是在 valgrind 下的 wine 本身下的 linux 上运行你的 windows 二进制文件,未经修改。这就是为什么我只提到 32 位:valgrind 无法在支持 64 位的 wine 下运行应用程序,支持 64 位的 wine 是实验性的(64 位,我的意思是运行 64 位 Windows 应用程序)
          【解决方案5】:

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

          但是,我不知道 Windows 上有任何此类工具。

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-09-01
              • 2011-09-17
              • 1970-01-01
              • 2012-07-16
              • 2011-02-20
              • 1970-01-01
              相关资源
              最近更新 更多