我有一个在 Linux、Solaris 和 AIX 上运行的 C 应用程序。我使用了 Totalview 的 MemoryScape 之类的工具来追踪 Linux 上的内存泄漏,而且它是 100% 干净的。但是,我注意到 Solaris 上有一个小漏洞。
所以我一直在 Solaris 上使用“libumem”来尝试查找泄漏。
我的应用程序要么调用“用户出口”(通过子进程调用),要么不调用。
因此,如果我在没有用户退出的情况下运行应用程序(因此没有子进程调用),那么 libumem 可以 100% 工作......而且我仍然没有看到任何泄漏......
LD_PRELOAD=libumem.so UMEM_DEBUG=audit ./myapplication config.ini
但是当我打开用户出口调用以便主应用程序调用子进程时,我会在运行时由子进程将以下内容打印到 STDOUT:
ld.so.1:userexit_proxy:致命:libmapmalloc.so.1:没有这样的文件或目录
请注意,如果我不使用“libumem”,那么应用程序会 100% 运行......(仍然只是很小的内存泄漏)
现在我的应用程序是用 64 位编译的,我注意到 /usr/lib/libmapmalloc.so.1 是 32 位的,但这应该没什么区别......
知道如何在也调用子进程的应用程序上使用 libumem 吗?
注意:我也尝试将变量导出到整个环境,仍然没有运气
导出 LD_PRELOAD=libumem.so 导出 UMEM_DEBUG=审计
另外,如果我错了,请纠正我,但是如果子进程完成,那么该子进程中的任何“泄漏内存”都会自动释放,对吗?所以我可以假设 Solaris 上没有泄漏来自子进程调用?
在这方面的任何帮助将不胜感激
谢谢您的帮助
林顿