微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 如何用DDMS分析native memory leak

如何用DDMS分析native memory leak

时间:10-02 整理:3721RD 点击:
[DESCRIPTION]

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

[SOLUTION]

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的进程:


5. 切换到native heap菜单,填入symbols search path(因为是linux路径,所以windows不能用,这导致第6步的结果没
有函数名称信息,只有函数地址!),点击snapshot current native heap usage就可以看到当前native heap的状况


6. 点击保存后,可以导出一个文本文件,打开后,可以看到一个个记录,它们分配大小*分配次数从大到小排列,所以
如果有泄露的话,一般看一个记录就够了,拿到调用栈再结合代码分析可能的泄露点

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top