在solaris上有替代malloc和免费图书馆吗?

时间:2011-12-13 16:30:58

标签: memory memory-management memory-leaks malloc solaris

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

我能够编写一个正确调用的存根malloc和自由函数。问题是他们除了日志之外不做任何其他事情。结果,系统崩溃

我的问题是:它们是一个替代malloc库,可以在solaris上运行,可以从我的stub malloc&免费功能?

3 个答案:

答案 0 :(得分:3)

理想情况下,您应该使用一些内存分析工具,但如果没有相同的内容,您可以尝试按计划实施自己的检漏仪。

您可以通过包装器调用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;
}

答案 1 :(得分:3)

为什么不直接执行libumem的LD_PRELOAD并使用UMEM_DEBUG? umem_debug的联机帮助页应该为您提供更多信息。

答案 2 :(得分:0)

除了libumem之外,我还建议使用包含RTC内存泄漏检测程序的Solaris Studio dbx。