G ++多平台内存泄漏检测工具(G++ Multi-platform memory leak det

2019-07-29 07:51发布

有谁知道我在哪里可以找到C ++内存内存泄漏检测工具,它可以是在命令行或Eclipse插件在Windows和Linux上运行。 我想它很容易使用。 优选地,一个不覆盖新的(),删除(),malloc()函数或免费()。 像GDB的东西,如果它会是在命令行,但我不记得被用于检测内存泄漏。 如果有一个单元测试框架,它会自动完成,这将是巨大的。

这个问题是类似的其他问题(如Windows为GNU C / C ++下的内存泄漏检测 ),但我觉得这是不同的,因为这些要求窗口的具体解决方案或有解决方案,我宁愿避免。 我觉得我在寻找的东西更具体一点在这里。 建议没有满足所有要求,但尽可能多的将是很好。

谢谢。

编辑:既然这已经上来,由“覆盖”我的意思是什么,需要我#包括一个图书馆或以其他方式改变了C ++怎么编译我的代码,如果它这样做在运行时,这样运行的代码在不同的环境赢得了“T有什么影响将是巨大的。 而且,不幸的是,我没有在Mac,所以任何建议都是无益的,但感谢你的努力。 我的桌面上运行Windows(我已经安装了Linux,但我的双显示器不使用它),并在VM我宁愿不运行Linux,但肯定是一个选项。 我的笔记本电脑运行Linux操作系统,所以可以使用那里的工具,但我肯定会喜欢坚持我的桌面,屏幕空间是极好的保持所有的设计文档,并考虑要求,而不必过多走动在桌面上。

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

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

Answer 1:

Valgrind的是你最好的朋友 。 Valgrind的有一个插件为月食。 “可悲” Valgrind的并不在Windows上运行,但它运行在Mac OSX,* BSD和Linux,所以我认为“多平台”。 :)

Valgrind的不“覆盖”新/删除/的malloc /免费的,但不能编译(这样你就不必重新编译如果这是你的意思)期间。 它解释二进制所以在性能测试期间受些影响。



Answer 2:

对于32级的应用,的valgrind +酒可以是一个可行的解决方案,以及用于窗口的应用程序。 如果您的应用程序可以在酒没有任何变化运行,然后运行它的valgrind下酒+效果很好,我(很有限的)经验。 由于您的应用程序在Linux下工作的,我猜想,你的应用程序很可能会在酒运行(避免非常窗户,还不支持在酒特定代码)。



Answer 3:

当你提到这是不可取的贝姆垃圾收集器可以用来检测内存泄漏。 简单地说,如果垃圾收集器永远实际上然后运行通常你有内存泄漏。 它是用这样的方式由Mozilla检测Firefox的内存泄漏。



Answer 4:

杜玛是我用了很多我的项目的一个跨平台的泄漏检测库。 这是很好的,因为你不必#include任何具体的杜马的头,只是在链接库在您的系统的libc,其中包含了内存分配例程链接之前,并且在连接的libstdc ++后。

它可以是一种棘手的建立,与C ++项目中尤其是当,但我认为这是非常值得投资的时间。 它帮助我寻找到我删除分配两次几个内存泄漏,以前我可能没有发现,否则,1例。

一个说明:这是容易得多,如果你建立一个静态存档(默认情况下Windows自带),因为它有助于减少实际上是由泄漏引起的运行时间“误报”。



Answer 5:

还有的leaks在MacOS X工具(我不知道,如果它在其他地方存在),我用了一个名为Linux上memprof工具。 还有的valgrind其在Linux和令人难以置信的真棒,但有一个显着的性能命中,并公开在Mac OS,但我还没有尝试过。

我不知道。但是在Windows任何这样的工具。



Answer 6:

在GCC的新版本有一些所谓的漏液 。 你只需要添加-fsanitize=leak编译命令。 然后你正常运行程序,并在年底,如果有任何泄漏,你会得到总结(当然,在终端)。



文章来源: G++ Multi-platform memory leak detection tool