一,logcat日志文件
1,addroid日志系統提供了記錄和查看系統調試信息的功能,日志都是從各種軟件和一些系統的緩沖區(內存)中記錄下來的,緩沖區可以通過logcat命令來查看和使用
2,在開發者選項中,有個選項叫做“日志記錄器緩沖區大小”,默認是256K,日志是循環寫入到緩沖區的,在通常情況下,寫滿是最舊的日志會被刪除,給新的日志留存空間
3. logcat 日志是以 beginning of xxx 開頭的
4,logcat緩沖區:android log輸出量很大,特別是通信系統的log,因此adroid把log輸出到不同的緩沖區,目前定義了4個log的緩沖區:
radio:輸出通信系統的log 通信系統如:藍牙,wifi,3g、4g等
system:輸出系統組件的log 系統組件的權限比較高,和系統相關的都會產生日志
events: 輸出event模塊的log 這個是事件模塊,只有是手機對手機的操作都會產生事件
main : 所有java層的log 只要是java語言編寫的,都是產生log,他不屬於上面的3層內容
默認log輸出(不指定緩沖區的情況下)是輸出到system和main緩沖區的log
5,抓取通信設備的log: adb logcat -b radio > d:\test\radio.log 如果不加-b 會默認抓取main日志
6,抓取main模塊的日志:adb logcat > d:\test\main.log 這里抓取的日志不顯示時間,那么怎么顯示時間呢?用如下命令
adb logcat -v time > d:\test\main_time.log
7,日志的輸出格式:由五部分組成,如圖:
a,寫下日志的時間,如:04-03 13:58:17.146
b,優先級,在android中,日志的優先級從低到高分以下幾種
V---Verbose(啰嗦,最低級別,開發調試中一些詳細的信息,在開發中使用,不可在發布產品中使用)
D---Debug(調試,用於調試信息,可在發布產品中關閉,比較常見)
I--info(信息,一般是提示性的信息)
W--Warning(警告)
E--Error(錯誤,已經出現可影響運行的錯誤,如應用crash時輸出的日志)
c,標簽(tag),表明日志發起者和方便日志的過濾篩選,如圖中所示
d,PID(進程ID),如圖中所示4513
e,正文,本日志的主體內容
每一行的日志都由這些內容組成
8,崩潰事件,在手機的體現為:
很抱歉,“xxx”已經停止運行了------因為沒有相應的app復現,所以只能手寫,無截圖
這是崩潰,不是閃退,閃退沒有提示框,都是crash 錯誤
我們可以把日志打印出來:adb logcat -v time > > d:\test\main_crash.log
在日志中我們可以搜索EXCEPTION這個關鍵字,用來找到具體錯誤的內容
9,anr事件,在手機上的體現為:
說明:anr全名是application not responding,也就是應用無響應,當操作在一段時間內系統無法處理時,系統層面會彈出上圖的ANR對話框
1,為用戶在主線程長時間被阻塞時提供處理交互,提高用戶體驗
2,android系統一種自身檢測機制
日志:adb logcat -v time >d:\test\main_anr.log
定位日志:搜索ANR in 如圖
下面還有load:負載情況
接着下面是cpu的使用率
這里的日志給開發還不能夠定位問題,開發 要定位問題就找到方法調用棧,那么這里並沒有方法調用棧,不過通過這里可以了解是否CPU原因產生的
在這個日志中我們可以看到下圖的輸出:
這說明anr的日志在系統的/data/anr/traces.txt目錄下,通過這個命令就可以看tracse.txt中的日志,但是這里並不全,而且還非常多
那么我們可以使用adb pull 命令把讓拉取出來
在這個日志中可能和adb logcat出現時間差,如果日志在3s內,就沒問題,如果時間太長,就是需要重新找自己需要的日志,為什么時間會有差別,是因為adb logcat和main模塊兩個是不同的模塊,不會同步
在traces.txt日志中我們可以搜索TIMED_WAIT,就可以找到方法調用棧,這不是我們可以分析的,直接給開發就可
所以要提交bug,需要提交logcat文件和tracse文件,tracse這個文件只會保留最新的anr信息,新的anr信息會把原來的anr信息覆蓋掉,所以我們在測試的時候,如出現多次anr信息,我們就要用到dropbox
我們可以使用adb shell 進入到android系統中,然后執行cd /data/system/dropbox 進入到dropbox中
我們可以通過adb pull 把這些文件都拉取出來分析,這里既可以分析anr,也可以分析crash,萬能的
我們可以通過時間來判斷哪些是先產生的,哪些是后產生的