Android开发——使用DDMS分析Native层内存泄漏
针对Java层的内存泄漏,Android提供了方便的内存泄漏检测工具,例如MAT、LeakCanary。但对于native层开发,要追查C/C++代码的内存泄漏,valgrind等常用工具并不适用。幸好,Google的bionic库提供了新的方法。下面就介绍如何利用DDMS分析Native层的内存泄漏。
检查是否有 libc_malloc_debug_leak.so
所有的Native内存分配函数(malloc,calloc,etc.)都在Android的libc库中。为了跟踪堆内存的分配,需要使用这个库的特别版本,可以将每次内存开销记录下来。这些特殊版本的libc(libc_malloc_debug_leak.so和libc_malloc_debug_qemu.so,在/system/lib 下查看是否有这两个库 ) 。
配置build.prop中的libc.debug.malloc属性值
内存调试靠读取 build.prop 文件中的配置属性 libc.debug.malloc 来控制的,属性值含义如下:
bionic/libc/bionic/malloc_debug_common.c
libc.debug.malloc 1 检测内存泄漏
libc.debug.malloc 5 分配的内存用0xeb填充,释放的内存用0xef填充
libc.debug.malloc 10 内存分配打pre-和post- 的桩子,可以检测内存的overruns
libc.debug.malloc 20 SDK模拟器上检测内存用
为了开