为什么需要日志
复现问题,回溯到问题产生时候的系统状态,有利于定位和分析问题。
安卓日志有哪些?
cpu
关注的纬度:
有什么用:
App卡顿、ANR
App异常退出
怎么用:
1.应用使用
adb shell dumpsys activity processes >> D:\app_process.log
adb shell COLUMNS=512 top -n 1 -s cpu >>D:\cpu.log
adb shell COLUMNS=512 top -n 1 -s vss >>D:\cpu_vss.log
adb shell COLUMNS=512 top -n 1 -s thr >>D:\cpu_thr.log
CPU内存
adb shell dumpsys cpuinfo >> D:\cpu_meminfo.log
CPU温度
adb shell cat /sys/class/thermal/thermal_zone0/temp >> D:\cpu_tmp.log
内存存储器
关注的纬度:
有什么用:
帮助定位内存抖动、内存溢出、内存泄漏的问题
怎么用:
系统内存
adb shell dumpsys meminfo >> D:\system_meminfo.log
指定app内存
adb shell dumpsys meminfo com.xx >>>> D:\com.xx_meminfo.log
adb shell am dumpheap com.xx/data/anr/Launcher.hprof
任务栈
关注的纬度:
Ams Stack
Service Stack
Broadcast
有什么用:
关注界面上启动过的Activity、Service、Broadcast,分析页面导航异常、页面加载异常、后台任务异常的问题
怎么用:
1.activity
adb shell dumpsys activity >> D:\AmsStack.log
2.广播
adb shell dumpsys activity broadcasts >>D:\broadcasts.log
3.服务
adb shell dumpsys activity services >>D:\services .log
anr
关注的纬度:
有什么用:
分析App无响应的原因、App被杀死的原因
怎么用:
adb pull /data/anr D:\2021\
trace
关注的纬度:
有什么用:
分析App无响应的原因、App被杀死的原因
Log
关注的维度:
Systemlog
Eventlog
kernellog
怎么用:
logcat输出
adb logcat -v time >D:\log.txt
dev/log导出
adb pull /dev/log/ D:\ohters\
该目录有4种文件
3.其他路径的日志按需导出
综上可以看到,要抓的日志真是太多了,抓起来麻烦,看起来汇总分析也麻烦,那么有没有一个现成工具供我们收集和分析呢,答案是有!安卓系统提供了Bugreport!
日志阅读的思路
第一步:定位进程死亡的时间点,参考《进程-确定进程死亡时间》
第二步:假设进程死亡的原因,设置怀疑点,根据经验搜索关键字。
第三步:复现出现异常的步骤,验证怀疑点是否正确
日志解析工具Bugreport
如何用
导出日志
adb bugreport 1>>D:\ohters\bugreport.log
下载ChkBugReport.jar
生成html报告
java -jar ./chkbugreport.jar ./bugreport.log
可能遇到的问题:
Failed to get bugreportz version, which is only available on devices running Android 7.0 or later. Trying a plain-text bug report instead.
解决步骤:
下载21版本的adb
关闭正在运行的高版本adb adb kill-server
指定21版本的adb来捕获日志D:\ohters\adb bugreport 1>>D:\ohters\bugreport.log
有什么用
输出到Android系统的Bugreport包含系统服务 (dumpsys)、错误日志 (dumpstate) 和系统消息日志 (logcat) 的诊断输出。系统消息包括设备抛出错误时的堆栈轨迹,以及从所有应用中使用 Log 类写入的消息。
配合安卓工具ChkBugReport可以将日志信息可视化显示到静态页面种。
![](/files/attmgn/2024/6/freeflydom20240603161719894_0.jpg)
日志分析经验积累
日志阅读的思路
第一步:定位进程死亡的时间点,参考《进程-确定进程死亡时间》
第二步:假设进程死亡的原因,设置怀疑点,根据经验搜索关键字。
第三步:复现出现异常的步骤,验证怀疑点是否正确
关键字附录参考
搜索 Fatal
搜索 uncaughtException
搜索 crashreport
搜索 Exception
搜索 Application Not Response
搜索 NetworkOnMainThreadException
搜索 ANR Warning
搜索 AnrManager
搜索 Anr in
13种常见进程死亡原因
java层的崩溃
低内存原因
搜索关键字lowmemorykiller
导出内存日
被其他进程杀死
怀疑是进程已经不活动了被系统杀
06-10 13:32:13.057 1000 1700 1812 I am_kill : [0,2409,com.miui.screenrecorder,955,empty for 1800s]
epmty进程被杀,系统内empty进程数量达到阈值26(不同手机略有不同)会按时间顺序查杀进程,搜索关键字empty ;
06-10 16:00:54.244 1000 1700 1795 I ActivityManager: Killing 20081:com.android.providers.calendar/u0a72 (adj 985): empty #26
自己退出,结束自己,搜索关键字: exited 、cleanly
有时候应用退出不一定是因为奔溃,可能是程序员代码没写对或者漏掉了一些环境细节让应用主动退出了。除了看ApplicationExitInfo外我们还能通过logcat看到。
06-10 10:17:04.053 root 689 689 I Zygote : Process 29263 exited cleanly (0)
06-10 10:17:04.056 1000 1692 1805 I libprocessgroup: Successfully killed process cgroup uid 10252 pid 29263 in 122ms
06-10 10:17:03.933 1000 1692 5189 I ActivityManager: Process com.tencent.tmgp.pubgmhd (pid 29263) has died: hvy HVY
被系统进程杀掉
系统app调用forceStopPackage 接口,杀掉我们的应用,我们搜索stop com.xxx.aaa due to from process
06-15 19:34:10.498 26589 29585 I ActivityManager: Killing 14459:com.xiaomi.misubscreenui/1000 (adj 0): stop com.xiaomi.misubscreenui due to from process:com.miui.voiceassist
线程过度使用CPU导致所在进程被杀
上次adj降为Service以下到现在经历2221553 ms,cpu POWER_CHECK_MAX_CPU_4 = 2, 两次检测时间间隔为300044 ms,使用cpu时间为16720ms,超过2%,就会被杀。
06-06 18:07:44.445 1000 1651 1798 I am_kill : [0,22157,com.ximalaya.ting.android,900,excessive cpu 16720 during 300044 dur=2221553 limit=2]
06-06 18:07:44.445 1000 1651 1798 I ActivityManager: Killing 22157:com.ximalaya.ting.android/u0a239 (adj 900): excessive cpu 16720 during 300044 dur=2221553 limit=2
06-06 18:07:44.566 root 681 681 I Zygote : Process 22157 exited due to signal 9 (Killed)
线程异常所在进程被杀,进程的某个线程发生异常,自己发Signal 9信号给Zygote 杀掉自己,搜索关键字 Sending signal
06-07 16:53:03.027 1000 2566 2582 I Process : Sending signal. PID: 2566 SIG: 9
06-07 16:53:03.154 root 681 681 I Zygote : Process 2566 exited due to signal 9 (Killed)
06-07 16:53:03.167 1000 1734 4006 I ActivityManager: Process com.android.systemui (pid 2566) has died: pers PER
应用重装,被杀,搜索关键字Force stopping、installPackageLI、deletePackageX
06-10 15:59:30.827 1000 1700 1812 I ActivityManager: Force stopping com.google.android.gms appid=10190 user=-1: installPackageLI
06-10 15:59:30.984 1000 1700 1812 I ActivityManager: Killing 3876:com.google.android.dialer/u0a180 (adj -700): stop com.google.android.gms: installPackageLI
ANR被杀
OOM被杀
死锁被杀,搜索关键字Force finishing 、Force removing、Force stopping
转自https://www.cnblogs.com/jincheng-yangchaofan/p/18225812
该文章在 2024/6/3 16:20:27 编辑过