為什么需要日志
復(fù)現(xiàn)問題,回溯到問題產(chǎn)生時(shí)候的系統(tǒng)狀態(tài),有利于定位和分析問題。
安卓日志有哪些?
cpu
關(guān)注的緯度:
單個(gè)應(yīng)用使用
系統(tǒng)cpu分配
溫度
有什么用:
App卡頓、ANR
App異常退出
怎么用:
1.應(yīng)用使用
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內(nèi)存
adb shell dumpsys cpuinfo >> D:\cpu_meminfo.log
CPU溫度
adb shell cat /sys/class/thermal/thermal_zone0/temp >> D:\cpu_tmp.log
內(nèi)存存儲(chǔ)器
關(guān)注的緯度:
有什么用:
幫助定位內(nèi)存抖動(dòng)、內(nèi)存溢出、內(nèi)存泄漏的問題
怎么用:
系統(tǒng)內(nèi)存
adb shell dumpsys meminfo >> D:\system_meminfo.log
指定app內(nèi)存
adb shell dumpsys meminfo com.xx >>>> D:\com.xx_meminfo.log
adb shell am dumpheap com.xx/data/anr/Launcher.hprof
任務(wù)棧
關(guān)注的緯度:
Ams Stack
Service Stack
Broadcast
有什么用:
關(guān)注界面上啟動(dòng)過的Activity、Service、Broadcast,分析頁(yè)面導(dǎo)航異常、頁(yè)面加載異常、后臺(tái)任務(wù)異常的問題
怎么用:
1.activity
adb shell dumpsys activity >> D:\AmsStack.log
2.廣播
adb shell dumpsys activity broadcasts >>D:\broadcasts.log
3.服務(wù)
adb shell dumpsys activity services >>D:\services .log
anr
關(guān)注的緯度:
系統(tǒng)anr日志
Blockcanary日志
有什么用:
分析App無響應(yīng)的原因、App被殺死的原因
怎么用:
adb pull /data/anr D:\2021\
trace
關(guān)注的緯度:
有什么用:
分析App無響應(yīng)的原因、App被殺死的原因
Log
關(guān)注的維度:
Systemlog
Eventlog
kernellog
怎么用:
logcat輸出
adb logcat -v time >D:\log.txt
dev/log導(dǎo)出
adb pull /dev/log/ D:\ohters\
該目錄有4種文件
radio:輸出通訊系統(tǒng)(無線/電話相關(guān))的log。
system:輸出系統(tǒng)緩沖區(qū)的log。
events:輸出事件緩沖區(qū)的log。
main:全部java層的log, 也是主緩沖區(qū) (默認(rèn)緩沖區(qū))。
3.其他路徑的日志按需導(dǎo)出
綜上可以看到,要抓的日志真是太多了,抓起來麻煩,看起來匯總分析也麻煩,那么有沒有一個(gè)現(xiàn)成工具供我們收集和分析呢,答案是有!安卓系統(tǒng)提供了Bugreport!
日志閱讀的思路
第一步:定位進(jìn)程死亡的時(shí)間點(diǎn),參考《進(jìn)程-確定進(jìn)程死亡時(shí)間》
第二步:假設(shè)進(jìn)程死亡的原因,設(shè)置懷疑點(diǎn),根據(jù)經(jīng)驗(yàn)搜索關(guān)鍵字。
第三步:復(fù)現(xiàn)出現(xiàn)異常的步驟,驗(yàn)證懷疑點(diǎn)是否正確
日志解析工具Bugreport
如何用
導(dǎo)出日志
adb bugreport 1>>D:\ohters\bugreport.log
下載ChkBugReport.jar
生成html報(bào)告
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
關(guān)閉正在運(yùn)行的高版本adb adb kill-server
指定21版本的adb來捕獲日志D:\ohters\adb bugreport 1>>D:\ohters\bugreport.log
有什么用
輸出到Android系統(tǒng)的Bugreport包含系統(tǒng)服務(wù) (dumpsys)、錯(cuò)誤日志 (dumpstate) 和系統(tǒng)消息日志 (logcat) 的診斷輸出。系統(tǒng)消息包括設(shè)備拋出錯(cuò)誤時(shí)的堆棧軌跡,以及從所有應(yīng)用中使用 Log 類寫入的消息。
配合安卓工具ChkBugReport可以將日志信息可視化顯示到靜態(tài)頁(yè)面種。
日志分析經(jīng)驗(yàn)積累
日志閱讀的思路
第一步:定位進(jìn)程死亡的時(shí)間點(diǎn),參考《進(jìn)程-確定進(jìn)程死亡時(shí)間》
第二步:假設(shè)進(jìn)程死亡的原因,設(shè)置懷疑點(diǎn),根據(jù)經(jīng)驗(yàn)搜索關(guān)鍵字。
第三步:復(fù)現(xiàn)出現(xiàn)異常的步驟,驗(yàn)證懷疑點(diǎn)是否正確
關(guān)鍵字附錄參考
搜索 Fatal
搜索 uncaughtException
搜索 crashreport
搜索 Exception
搜索 Application Not Response
搜索 NetworkOnMainThreadException
搜索 ANR Warning
搜索 AnrManager
搜索 Anr in
13種常見進(jìn)程死亡原因
java層的崩潰
低內(nèi)存原因
被其他進(jìn)程殺死
懷疑是進(jìn)程已經(jīng)不活動(dòng)了被系統(tǒng)殺
06-10 13:32:13.057 1000 1700 1812 I am_kill : [0,2409,com.miui.screenrecorder,955,empty for 1800s]
epmty進(jìn)程被殺,系統(tǒng)內(nèi)empty進(jìn)程數(shù)量達(dá)到閾值26(不同手機(jī)略有不同)會(huì)按時(shí)間順序查殺進(jìn)程,搜索關(guān)鍵字empty ;
06-10 16:00:54.244 1000 1700 1795 I ActivityManager: Killing 20081:com.android.providers.calendar/u0a72 (adj 985): empty #26
自己退出,結(jié)束自己,搜索關(guān)鍵字: exited 、cleanly
有時(shí)候應(yīng)用退出不一定是因?yàn)楸紳?,可能是程序員代碼沒寫對(duì)或者漏掉了一些環(huán)境細(xì)節(jié)讓應(yīng)用主動(dòng)退出了。除了看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
被系統(tǒng)進(jìn)程殺掉
系統(tǒng)app調(diào)用forceStopPackage 接口,殺掉我們的應(yīng)用,我們搜索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導(dǎo)致所在進(jìn)程被殺
上次adj降為Service以下到現(xiàn)在經(jīng)歷2221553 ms,cpu POWER_CHECK_MAX_CPU_4 = 2, 兩次檢測(cè)時(shí)間間隔為300044 ms,使用cpu時(shí)間為16720ms,超過2%,就會(huì)被殺。
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)
線程異常所在進(jìn)程被殺,進(jìn)程的某個(gè)線程發(fā)生異常,自己發(fā)Signal 9信號(hào)給Zygote 殺掉自己,搜索關(guān)鍵字 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
應(yīng)用重裝,被殺,搜索關(guān)鍵字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被殺
死鎖被殺,搜索關(guān)鍵字Force finishing 、Force removing、Force stopping
轉(zhuǎn)自https://www.cnblogs.com/jincheng-yangchaofan/p/18225812
該文章在 2024/6/3 16:20:27 編輯過