malloc debug单个app进程(查看native内存)

  1. 对于单个App

官方文档:https://android.googlesource.com/platform/bionic/+/master/libc/malloc_debug/README.md

执行前:确定一下手机版本和对应的symbols文件,在corgi上下载symbols文件,用于解析heap文件

步骤:(现miui lite也可,L19手机上发现可以使用)

adb root

adb shell setprop dalvik.vm.force-java-zygote-fork-loop true
adb  shell stop
adb  shell start

#等出现开机后的界面,继续执行

#以com.android.bluetooth进程为例,等待开机后执行下列命令
adb shell setenforce 0
adb shell setprop  wrap.com.android.bluetooth '"LIBC_DEBUG_MALLOC_OPTIONS=backtrace logwrapper"'

adb shell am force-stop com.android.bluetooth
#特殊进程执行 adb shell kill -9 <pid>,如屏锁、桌面之类的应用,且该类应用执行后需要等待1-2分钟

#打开应用,此时adb shell ps |grep logwrapper,可看到出现该进程
adb shell dumpsys meminfo com.android.bluetooth #用于查看com.android.bluetooth的pid

>>按照步骤复现问题

adb shell am dumpheap -n <PID_TO_DUMP> /data/local/tmp/heap.txt

adb pull /data/local/tmp/heap.txt .
#再用native_heapdump_viewer.py解析即可,native_heapdump文件在任意源码的development目录中,格式如下:
python ~/ssd/K9E_origin/development/scripts/native_heapdump_viewer.py --html --symbols /home/mi/下载/线刷包/k9e/out/target/product/zijin/symbols (symbols路径) heap.txt > heap.html
  1. 执行实例

以L3A dump小米笔记app数据为例,这里需要跟踪的进程是com.miui.notes

让进程已被杀掉 或是使用 adb shell am force-stop com.miui.notes

  1. 依次执行 adb root 、 adb shell setprop dalvik.vm.force-java-zygote-fork-loop true 、adb shell stop、adb shell start,之后等待手机亮屏;

  2. 依次执行adb root && adb shell setenforce 0、adb shell getprop dalvik.vm.force-java-zygote-fork-loop,确认变量是否设置成功,返回值为true则设置成功

  3. 此时执行一下:

  4. adb shell kill -9 <pidof com.miui.notes >

  5. 打开需要检测的app,这个过程可能会出现卡顿,或是进程起不来的情况,若等待2分钟后app依然起不来,退到后台,清理一下后台,从 d 步骤开始重新执行

  6. app启动后,执行 adb shell ps |grep logwrapper,若出现该进程说明已经wrap成功

  7. 此时看一下进程对应的pid,使用adb shell dumpsys meminfo <进程名> 进行查看

  8. 操作App,按照步骤复现问题场景;

  9. 执行下面命令dump出数据,pid为 g 步骤中得到的pid

  10. 执行下面命令将heap.txt放到本地问题

  11. 根据命令使用symbols解析,格式如上面的格式,这里本地执行的命令如下(symbols 要和 手机版本对应,比如你的手机版本是 22.5.30 ,symbols也要下22.5.30版本的,如果还不行就在文件夹里多试几次symbols路径)

  12. adb pull /data/local/tmp/heap.txt .

  13. 一般得到的结果为,完成:

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值