Android 系统(30)---如何用DDMS分析native memory leak


    native程序如果发生内存问题,一般都比较难查,幸好DDMS有集成native memory leak( 仅仅针对app,无法分析mediaserver等非app的进程)功能,通过DDMS可以观察native堆的使用状况以及每个chunk的调用栈等信息,有助于分析native memory leak。
详情可参考:https://source.android.com/devices/tech/debug/native-memory.html

 

1. 请使用eng版本测试。

2. 首先要先开启bionic memory debug 1模式(bionic malloc debug信息可以到网络搜索相关资源),然后连上adb。

    方法如下:

      KK及以前版本:

        adb shell setprop persist.libc.debug.malloc 1
        adb shell reboot

      L及以后版本:

  $ adb shell setprop libc.debug.malloc 1
  $ adb shell stop
  $ adb shell start

    确认是否有开启的方法,查看main log,如有看到以下log,就说明开启成功啦

3. 开启DDMS隐藏的功能 (建议用linux版本的DDMS)

    需要改一个配置. 找到

        linux版本:~/.android/ddms.cfg

        windows版本:C:\Documents and Settings\$user\.android\ddms.cfg

     在ddms.cfg结尾新增一行: native=true 保存后重启ddms

     就可以看到新加的一个'native heap'的tab了

4. 打开DDMS,选择需要查看native memory的进程:

选择process

5. 切换到native heap菜单,填入symbols search path(因为是linux路径,所以windows不能用,这导致第6步的结果没有函数名称信息,只有函数地址!),点击snapshot current native heap usage就可以看到当前native heap的状况
native heap菜单
6. 点击保存后,可以导出一个文本文件,打开后,可以看到一个个记录,它们分配大小*分配次数从大到小排列,所以如果有泄露的话,一般看一个记录就够了,拿到调用栈再 结合代码分析可能的泄露点
导出的文本文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值