分享

StevGuo系列文章翻译之Android内存泄漏检测

 昵称7324690 2012-08-25

StevGuo系列文章翻译之Android内存泄漏检测

分类: Google Android 73人阅读 评论(0) 收藏 举报

原文:http://blog.csdn.net/a345017062/article/details/6083035

编译完Android源码后,会得到两个bionic动态C库,libc.so和libc_debug.so,为了能够检测内存泄漏,我们应该首先在Android的rootfs中用libc_debug.so替换libc.so。在libc_debug.so库中,Android隐藏了两个可以用来检测内存泄漏的API:

void get_malloc_leak_info(uint8_t** info, size_t* overallSize, size_t* infoSize, size_t* totalMemory, size_t* backtraceSize);
void free_malloc_leak_info(uint8_t* info);

其中,info是我们分配的一块内存。overallSize是info的大小。infoSize是一个single entry的大小。totalMemory是我们跟踪的所有内存分配的总和,不包括heap。backtraceSize是back trace中的entry的最大数量。

我们可以在程序的开始和结束分别调用get_malloc_leak_info,然后比较差异,如果有什么不同,说明可能有内存泄漏。

因为C++的new/delete也是基于C的malloc/free的,所以这个方法也可以检测出C++的内存泄漏。

如果你想知道bionic是如何实现这个功能的,可以参考bionic/libc/bionic/memory_leak.c。

如果想知道怎么样使用这个功能,可以参考frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp。

你也可以像下面这样获取mediaplayer的内存使用信息:

#dumpsys media.player –m

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多