Android主要的系统Log分为以下几种:
ANR log bugreport log Tombstones Log Dropbox Log logcat的Log文件 qnx log
系统定制和应用开发过程中可以利用以上多种Log去进行系统分析和问题定位
-
ANR log
-
Log作用: 主要是收集系统中的ANR相关的Log和Crash信息,方便开发者解析使用
-
Log位置:/data/anr/*
-
手动命令触发:adb shell dumpsys dropbox
-
Tombstones Log(墓碑Log)
-
Log作用:系统崩溃时留下的遗言,怎么死的,死哪了,死的多惨。 当一个动态库(native 程序)开始执行时,系统会注册一些连接到 debuggerd 的 signal handlers,当系统 crash(崩溃) 的时候,会保存一个 tombstone 文件到/data/tombstones目录下(Logcat中也会有相应的信息),文件的确就像墓碑一样记录了死亡了的进程的基本信息(例如进程的进程号,线程号),死亡的地址(在哪个地址上发生了 Crash),死亡时的现场是什么样的(记录了一系列的堆栈调用信息)等等。
-
Log位置:/data/tombstones/*
-
Dropbox Log
-
Log作用:系统抓取的发生的严重问题的信息(ANR等)。和其他Log的区别,不包含打印的log信息,主要包含系统严重问题的信息
-
Log位置:/data/system/dropbox/*
-
logcat的Log
-
Log作用:android系统运行中的所有正常Log。
-
Log位置:adb logcat -v time >D:\log.txt 默认的main和system的log
-
qnx log
-
Log作用:车载Android相关的硬件Log。
-
Log位置:data/vendor/log/qnxlog等等
-
bugreport log
-
Log作用: bugreport记录android启动过程的log,以及启动后的系统状态,包括进程列表,内存信息,VM信息等等到. 以及最近的一次的系统错误等。
-
Log生成的方式:adb bugreport > bugreport.txt
-
使用方式:
-
3.1 通过cmd line: +进程名(查看进程信息)
xx----- pid 2007 at 2021-08-11 10:51:42 ----- Cmd line: com.xx.xx进程名 Build fingerprint: 'Android' ABI: 'arm64' Build type: optimized
-
3.2 通过CPU usage from: 查看Cpu的相关使用情况,通常长时间超过90%以上 (90% TOTAL),代表系统卡顿,有异常。load 压力解析参考飞书,性能介绍。
Load: 3.47 / 4.41 / 2.12 CPU usage from 204297ms to 1048ms ago (2021-08-02 14:39:08.031 to 2021-08-02 14:42:31.280): 19% 1034 14% 454/surfaceflinger: 5.1% user + 9.8% kernel / faults: 1807 minor 1 major 13% 572/system_server: 7.4% user + 6.3% kernel / faults: 67487 minor 145 major 6.2% 1903/android.process.media: 3.7% user + 2.4% kernel / faults: 21959 minor 5 major 6% 439/android.hardware.graphics.composer@2.1-service: 2% user + 4% kernel / faults: 266 minor +0% 8498/dumpsys: 0% user + 0% kernel 62% TOTAL: 29% user + 25% kernel + 1.4% iowait + 4.5% irq + 1.6% softirq ------ 0.036s was the duration of 'DUMPSYS CPUINFO' ------ ------ 11.637s was the duration of 'DUMP TRACES' ------
-
3.3 通过DUMPSYS MEMINFO:查看内存使用情况,和CPU类似,内存长期超过90% (Free RAM/Total RAM)以上也会造成系统性能异常的状态,可能引发系统大量进程和服务被杀重启,GC、OOM、WatchDog等。
Total RAM: 4,243,196K (status normal) Free RAM: 929,246K ( 64,038K cached pss + 546,296K cached kernel + 318,912K free) Used RAM: 2,599,924K (2,193,164K used pss + 406,760K kernel) Lost RAM: 714,026K Tuning: 256 (large 512), oom 322,560K, restore limit 107,520K (high-end-gfx) ------ 10.687s was the duration of 'DUMPSYS MEMINFO' ------ ------ DUMPSYS CPUINFO (/system/bin/dumpsys -t 10 cpuinfo -a) ------
- 4 bugreport Log包含的信息介绍如下图:
其中event log 比较关键能够看出来所有的用户和Monkey的关键信息,页面跳转和焦点变化等等
event修改:adb logcat -b events
待对比补充:t.zoukankan.com/jzssuanfa-p…
dumpsys
- 命令:adb shell dumpsys --help可以展示dumpsys的作用。
- adb shell dumpsys -l可以展示dumpsys支持的所有的命令参数
整理的比较好的文章:www.jianshu.com/p/01c5ffa19…
Framework log:
framework log开关,打开debug log开关:
adb shell setprop debug.atrace.tags.enableflags true
Android Log手机的各种小技巧,各种正则等: blog.csdn.net/jingwen3699…
快速截取系统错误Log:
adg logcat -iE |grep "AndroidRuntime"
查找多文件中的关键字Log:grep命令使用。
- 参考博客:zhuanlan.zhihu.com/p/561445240…
- grep -r -n -l -i "system.err" ( -r递归; -n显示行号; -l列出文件名看着更清晰不列详细行; -i 忽略大小写;4个指令就能列举出来包含的最简单的文件列表了)
- grep -r -n -l -i -v "system.err" (增加-v 反转查询会多出来很多文件,但是关联关系不太明确)
简单整理的卡顿复现抓Log的手顺:
Next action:后续请测试使用10.08后的版本,ROM应该不黑屏了,直接测试再现一下。
测试前请执行以下操作,之后不断重启再现卡顿即可。
一、这个只执行一次即可
adb root
adb remount
adb shell rm -rf /data/anr/*
adb shell rm -rf /data/tombstones/*
adb shell rm -rf /data/system/dropbox/*
二、下面这个每次重启都执行,N是重启次数。
adb root
adb remount
cd error(创建一个放错误文件的目录error)
adb logcat -b events > error/event-N.log
adb logcat -v time > error/logcatlog-N.txt
拷贝top.sh到本地error目录下。
sh error/top.sh(脚本每次重启重新执行,top.sh见飞书性能调查:Android疑难问题分析和性能调查)
三、如果卡顿再现,执行以下命令截取log。
adb pull /data/anr/ error/anr
adb pull /data/tombstones/ error/tombstones
adb pull /data/system/dropbox/ error/dropbox
adb bugreport > error/bugreport.txt
整个error目录打包压缩包,上传到bug上。
Binder时序log添加技巧:
在AIDL等binder通信的接口中加上,Binder.getCallingUid()和Binder.getCallingPid(),打印出调用的用户和进程号,方便追踪调用源头。快速定位bug。
Android FW的Log开关: persist重启后依然起作用。AudioService.VOL是自定义TAG标识。
DEBUG和INFO是参数
adb shell setprop persist.log.tag.AudioService.VOL DEBUG等