DDMS调试native heap实战

本文详细介绍了如何使用DDMS进行native堆内存的调试,包括设置参数、验证配置、获取内存快照、分析内存占用及定位调用位置等步骤,以监控库文件如libhwui.so的内存使用变化。
第一步:setprop libc.debug.malloc 1。这里有四种prop可以设置,1是mem leak,5和10是内存越界,

20是虚拟机。可悲的是5和10并没有被libc_malloc_debug库完美地支持,所以只有1好用。


第二步,stop, start。这些操作都是在device shell里面做的。设备会快速重启。


第三步,验证prop。getprop看看结果,然后ls一下,去logcat里看一下结果。如果结果都能对的上,那就可以继续了。


第四步,在ddms.cfg文件最后增加一行native=true并save。ddms.cfg位于c:\Users\xxx\.android目录下。


第五步,打开单独的ddms(确保eclipse没有在跑),选择Native Heap页面,点击snapshot按钮。

snapshot的过程有点慢。最后能看到每个so占用了多少内存以及百分比。

过一段时间snapshot一次就能看到每个so的趋势了。


第六步,分析。snapshot显示了分配内存的地址(记做addressA),

这个地址是RAM地址,不是so的相对地址。为了得到相对地址,

需要ps一下,找到你的pid,然后cat /proc/pid/maps,找到so的起始地址

(记做addressB)。然后拿addressA - addressB,得到相对地址,用addr2line定位到哪一处调用。

这里我还用过objdump -dS libXXX.so > XXX.dump,把so反编译出来,分析XXX.dump,

找到相对地址的调用位置



跑脚本,启动和关闭联系人

 for i in `seq 10000`; do adb shell am start com.android.contacts; sleep 1; adb shell am force-stop com.android.contacts; done

第七步:snapshort current native heap usage 对比观察库文件(libhwui.so)

占用的内存是否增加不减少


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值