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

你可能感兴趣的:(c,android,api,leak)