博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DDMS调试native heap实战
阅读量:4155 次
发布时间:2019-05-25

本文共 894 字,大约阅读时间需要 2 分钟。

第一步: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)

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

转载地址:http://fswxi.baihongyu.com/

你可能感兴趣的文章
进程创建时cgroup处理
查看>>
进程创建时共享内存处理
查看>>
idle进程创建
查看>>
内核线程创建
查看>>
linux elf tool readelf
查看>>
linux tool objdump
查看>>
linux tool nm
查看>>
字节对齐
查看>>
把类成员函数封装成线程API所需要的函数
查看>>
HTTP Live Streaming直播(iOS直播)技术分析与实现
查看>>
Ribbon界面图标可以直接用PNG做透明图标
查看>>
向其他软件窗口、控件发送消息的方法
查看>>
word或者pdf文件全部保存为图片的方法
查看>>
VS2010下SQLite3生成lib库文件
查看>>
sqlite3的helloworld
查看>>
MFC下支持中文的SQLite3封装类使用
查看>>
简单高效的多线程日志类
查看>>
研华USB4711A采集卡高速中断模式采集总结
查看>>
从零起步CMFCToolBar用法详解
查看>>
CMFCRibbonStatusBar用法
查看>>