我有一个使用各种第三方共享对象库的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上运行?
发布于 2012-05-12 10:28:48
试一试Dr. Memory。它基于DynamoRIO,并与Valgrind共享许多功能。
发布于 2020-09-28 15:40:19
在2020年,要查找Linux上的内存泄漏,您可以尝试:
对于GCC(4.8以上)和Clang (3.1以上),都可以使用地址消毒器,很棒这个工具已经在Chromium和Firefox等大型项目中被证明是有用的。
ASan将提供非常详细的内存区域信息,这对分析泄漏非常有帮助。
ASan的缺点:您需要使用选项-fsanitize=address
来构建程序
TCmalloc既可以与LD_PRELOAD一起使用,也可以直接链接到您的程序。结果可以用pprof程序可视化,它具有漂亮的web UI和控制台文本模式,如果address sanitizer在您的环境中不适用,我建议使用它(如果您有一个非常旧的编译器或您的PC运行ASan的内存非常有限)。
发布于 2017-04-10 22:03:56
Heapusage是一个简单的运行时工具,用于查找Linux和macOS上的内存泄漏。泄漏的输出日志格式非常类似于Valgrind,但它只记录明确的泄漏(即在终止时不释放分配)。
完全公开:我写的Heapusage是为了在Valgrind不够用的情况下使用(高性能应用程序,以及Valgrind不支持的CPU架构)。
https://stackoverflow.com/questions/7410160
复制相似问题