Android 系统调试技巧(1)系统内存调试

free-jdx 2021-03-29 11:34:27 5976
1. 前言

总结Android调试过程中关于系统内存方面的方法

2. 内存调试

Adb shell dumpsys procstats --hours X

adb remount
adb push cpu_monitor /system/xbin/cpu_monitor
adb shell chmod 777 /system/xbin/cpu_monitor
测试游戏前后所需要记录的准确数据:

(1)cpu_monitor -u 1 -m 500

记录下以下红色框中的Anon、slab、 cache 、sysfre、cmafre数据

(2)/sys/kernel/debug/ion/cma free 和busy数据

(3)0procmem {target game process pid} | grep /dev/pvrsrvkm

统计下面红色框内pvrsrvkm 内存total使用

3. 内存泄露

(1)Android Native 内存泄露

  • Android DDMS Native heap debug
  • Android Valgrind debug
  • Android AddressScanitizer debug

(2)Linux kernel内存泄露

Slab内存分布调试
CONFIG_DEBUG_SLAB=y
CONFIG_DEBUG_SLAB_LEAK=y
CONFIG_SLABINFO=y

adb shell echo 1 > /sys/kernel/debug/tracing/tracing_enabled
adb shell echo 1 > /sys/kernel/debug/tracing/tracing_on
adb shell echo > /sys/kernel/debug/tracing/trace
adb shell echo > /sys/kernel/debug/tracing/set_event
adb shell echo kfree kmalloc kmalloc_node kmem_cache_alloc kmem_cache_alloc_node kmem_cache_free >> /sys/kernel/debug/tracing/set_event
adb shell cat /sys/kernel/debug/tracing/trace_pipe > /data/trace.log

(3)ION内存泄露

cat /sys/kernel/debug/ion/heaps/cma

lsof | grep /dev/ion

lsof | grep dmabuf

showmem {可疑目标进程$PID}| grep dmabuf

4. 内存溢出

Armv8 64bit平台内核内核线程栈配置:默认16K,可调整;

栈底溢出检查
配置:CONFIG_STACK_TRACER=y

# mount -t debugfs none /sys/kernel/debug
# echo 1 > /proc/sys/kernel/stack_tracer_enabled 
# cd  /sys/kernel/debug/tracing/
# cat stack_max_size
# cat stack_trace

定期对stack_max_size 和 stack_trace进行采样,观察栈增长的可疑点

栈顶溢出检查
配置:CONFIG_CC_STACKPROTECTOR=y
栈顶越界,gcc提供了支持。打开内核配置CONFIG_CC_STACKPROTECTOR后,会打 开编译选项-fstack-protector.
栈顶溢出检查原理是: 在进程启动的时候, 栈顶后面放置一个预先设置好的stack canary(哨兵), 当栈发生溢出的时候会破坏stack canary的值, 当stack canary的值被破坏的时候, 内核就会直接触发panic。

静态代码编译检查
配置:CONFIG_FRAME_WARN=2048
查看编译时是否有编译警告:warning: the frame size of xxx bytes is larger then 2048 bytes [-Wframe-larger-than=]
如果有可疑的栈溢出死机,可以再适当调小WARN值,排查较大栈使用模块;

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
free-jdx
红包 98 7 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
free-jdx
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区