在dlopen和dlclose之间的共享库中找出内存泄漏

时间:2018-10-29 09:11:25

标签: memory-leaks shared-libraries memcheck

我们编写了一个共享库(例如slib.so),该库在永无止境的可执行文件中被dlopen,使用和dlclose。 我想检查库slib.so中是否存在内存泄漏,而无需附加可执行文件。

Linux中是否有任何工具可以找出共享库中的内存泄漏?因此,我需要一个工具来监视dlopen和dlclose之间的堆,并在dlclose之后报告问题。

1 个答案:

答案 0 :(得分:0)

  

我需要一个工具来监视dlopen和dlclose之间的堆,并在dlclose之后报告问题。

任何标准的泄漏检测工具都可以使用:Valgrind,Leak Sanitizer,TCMalloc堆检查器等。

您需要做的只是编写一个简单的可执行包装程序,如下所示:

#include <dlfcn.h>

int main()
{
  for (int j = 0; j < 10; j++) {
    void *h = dlopen("libslib.so", RTLD_NOW);
    // optionally exercise the library here.
    dlclose(h);
  }
}