在 linux 上查找泄漏的替代 valgrind (memcheck)? [关闭]

Posted

技术标签:

【中文标题】在 linux 上查找泄漏的替代 valgrind (memcheck)? [关闭]【英文标题】:Alternative to valgrind (memcheck) for finding leaks on linux? [closed] 【发布时间】:2011-11-16 15:10:24 【问题描述】:

我有一个使用各种第三方共享对象库的 linux x86 应用程序。我怀疑这些库正在泄漏​​内存(因为它不可能是我的代码;-)

我尝试了值得信赖的 valgrind,但它死于可怕的死亡,因为 one of the third-party libraries is using an obscure x86 instruction 那个 valgrind doesn't implement。

我找到了a recommendation for DUMA 并试了一下(使用 LD_PRELOAD 技术在运行时引入 DUMA),但它中止抱怨未通过 DUMA 分配的内存上的空闲操作(几乎可以肯定是某些人前面提到的第三方库之一中的静态对象的构造函数)。

是否有其他运行时可链接(或者不需要重新编译/重新链接)工具可以在 linux 上运行?

【问题讨论】:

【参考方案1】:

2020年,要查找Linux上的内存泄漏,您可以尝试:

Address Sanitizers

对于 GCC(4.8 以上)和 Clang(3.1 以上),地址清理器都可以使用,非常棒 该工具已被证明在 Chromium 和 Firefox 等大型项目中非常有用。

ASan 会提供非常详细的内存区域信息,这对于泄漏的分析非常有帮助。

ASan 的缺点:您需要使用选项-fsanitize=address 构建程序

TCmalloc

TCmalloc 既可以与 LD_PRELOAD 一起使用,也可以直接链接到您的程序。结果可以使用pprof 程序进行可视化,它具有漂亮的 Web UI 和控制台文本模式,如果地址清理程序不适用于您的环境,我建议使用它(如果您有一个非常旧的编译器或您的 PC 非常有限内存运行 ASan)。

【讨论】:

【参考方案2】:

Heapusage 是一个简单的运行时工具,用于在 Linux 和 macOS 上查找内存泄漏。泄漏的输出日志格式与 Valgrind 非常相似,但它只记录明确的泄漏(即终止时未释放的分配)。

完全披露:我编写 Heapusage 是为了在 Valgrind 不足的情况下使用(高性能应用程序,以及 Valgrind 不支持的 CPU 架构)。

【讨论】:

【参考方案3】:

TotalView debugger(或更准确地说,它的 Memscope)具有类似于 Valgrind 的功能集。

您也可以尝试Electric Fence (original author's link)(DUMA 的起源)解决缓冲区溢出或 touch-after-free 情况(但不适用于 memleaks)。

【讨论】:

【参考方案4】:

试试Dr. Memory。它基于 DynamoRIO 并与 Valgrind 共享许多功能。

【讨论】:

只是想补充一点,它只有 32 位。 @SantoshTiwari:我不这么认为。我认为您的意思是您的平台的二进制包可能仅适用于特定平台。 DynamoRIO 很灵活,也适用于(某些)64 位平台。 ~~Dr.M~~ 这个 Dr. Memory 版本不支持 64 位应用程序。

以上是关于在 linux 上查找泄漏的替代 valgrind (memcheck)? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 valgrind 查找内存泄漏?

Linux 内存泄漏检查工具 valgrind

Valgrind - 打开 Windows 内存转储

内存泄漏分析valgrind

Linux中内存泄漏检查工具的问题[关闭]

使用 Valgrind 检测 C++ 内存泄漏