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


编译完Android源码后,会得到两个bionic动态C库,libc.solibc_debug.so,为了能够检测内存泄漏,我们应该首先在Androidrootfs中用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是我们分配的一块内存。overallSizeinfo的大小。infoSize是一个single entry的大小。totalMemory是我们跟踪的所有内存分配的总和,不包括heapbacktraceSizeback trace中的entry的最大数量。

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

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

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

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

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

#dumpsys media.player –m

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值