為什么需要日志
復現問題,回溯到問題產生時候的系統狀態,有利于定位和分析問題。
安卓日志有哪些?
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可以將日志信息可視化顯示到靜態頁面種。
日志分析經驗積累
日志閱讀的思路
第一步:定位進程死亡的時間點,參考《進程-確定進程死亡時間》
第二步:假設進程死亡的原因,設置懷疑點,根據經驗搜索關鍵字。
第三步:復現出現異常的步驟,驗證懷疑點是否正確
關鍵字附錄參考
搜索 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 編輯過