adb 之日志文件分析(五)


一,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,萬能的

    我們可以通過時間來判斷哪些是先產生的,哪些是后產生的

    

 

    

      

    

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM