原文: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); 其中,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 |
|