我有一个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上运行?
答案 0 :(得分:5)
TotalView debugger(或更确切地说,它的Memscope)具有类似于Valgrind的功能集。
您还可以尝试Electric Fence( original author's link )(DUMA的来源)进行缓冲区溢出或免费触摸后的情况(但不能用于memleaks)
答案 1 :(得分:5)
尝试Dr. Memory。它基于DynamoRIO并与Valgrind共享许多功能。
答案 2 :(得分:2)
在2020年,要查找Linux上的内存泄漏,您可以尝试:
对于GCC(高于4.8)和Clang(高于3.1),都可以使用地址清理器,这很棒 该工具已被证明在Chromium和Firefox等大型项目中很有用。
ASan将提供非常详细的内存区域信息,这对于分析泄漏非常有帮助。
ASan的缺点:您需要使用选项-fsanitize=address
TCmalloc可以与LD_PRELOAD一起使用,也可以直接链接到您的程序。结果可以使用pprof程序进行可视化,它具有漂亮的Web UI和控制台文本模式,如果地址清理程序不适用于您的环境,建议您使用它(如果您使用的是非常老的编译器或PC运行ASan的内存非常有限)。
答案 3 :(得分:0)
Heapusage是一个简单的运行时工具,用于查找Linux和macOS上的内存泄漏。泄漏的输出日志记录格式与Valgrind非常相似,但它只记录明确的泄漏(即终止时未分配的分配)。
完全披露:我写了Heapusage用于Valgrind不合适的情况(高性能应用程序,以及Valgrind不支持的CPU架构)。