solaris上是否有替代的malloc和自由库?



我试图在Solaris操作系统上用c++/C编写的一个非常复杂的遗留系统中找到内存泄漏。这个想法是记录每个malloc和free,然后对日志进行后处理。

我可以写一个存根malloc和自由函数被正确调用。问题是它们除了日志什么都不做。结果导致系统崩溃

我的问题是:它们是在solaris上工作的malloc库的替代品,它可以从我的存根malloc&免费的功能?

为什么不直接做libumem的LD_PRELOAD并使用UMEM_DEBUG呢?umem_debug的手册应该会给你更多的信息。

理想情况下,您应该有一些内存分析工具,但是如果没有这些工具,您可以尝试按照您的计划实现自己的泄漏检测器。

您可以通过包装器调用mallocfree库版本。

这是一个你可以尝试实现的方案:

你的包装器函数应该实现一个功能,其中malloc的包装器存储行号,文件名,请求的大小&malloc在链表中返回的地址。
如何获得文件名和行号?
提示:使用__FILE__, __LINE__

free包装器应该检查发送的地址是否从链表中释放,并从链表中删除该条目。

在程序结束时,你应该打印这个链表的内容,它给你泄漏的内存大小,文件名和行号,从缓冲区被分配的地方。

更新:
如何在没有无限递归的情况下映射程序malloc调用到自己的包装器调用?

通过巧妙地使用宏!

#define malloc(X) my_malloc( X, __FILE__, __LINE__, __FUNCTION__)
void* my_malloc(size_t size, const char *file, int line, const char *func)
{
    void *p = malloc(size);
    printf ("Allocated = %s, %i, %s, %p[%li]n", file, line, func, p, size);
    /*Link List functionality goes in here*/
    return p;
}

除了libumem,我还推荐使用Solaris Studio dbx,它包含一个内存泄漏检测器RTC。

相关内容

  • 没有找到相关文章

最新更新