Ads 468x60px

##EasyReadMore##

07 8月, 2018

Android 使用 adb 抓 Log

如果 log 機制有上會放在下面目錄:

data/last_alog
data/last_kmsg

Log分類:

Android日志主要分為kernel、radio、event、main這四種log。

Kernel Log:
  kernel log屬于Linux内核的log ,可以通過讀取/proc/kmsg或者通過串口來抓取。
  adb 抓取kernel log的命令如下(需要有root權限):
   adb shell cat /proc/kmsg > /tmp/kernel.log
  Radio Log:
  -b radio參數可以抓取Android RIL層 log,在調試Android通信方面的代碼時,這個Log非常關鍵。抓取命令如下:
   adb logcat -b radio > /tmp/radio.log
  Main Log:
  main log和我們在eclipse裡通過DDMS中看到的log是一致的。抓取命令如下:
   adb logcat -b main > /tmp/main.log
  Event Log:
  event log屬于system log,平時可以跟在main log之後。抓取命令如下:
   adb logcat -b event -v time > /tmp/event.log
     -v time表示在log中加入每條log發生的時間。
完整Log:
  adb logcat -b選項是可以復用的,因此我們抓取所有Log的命令就是復用了-b選項。抓取命令如下:
   adb logcat -b main -b system -b radio -b events -v time > /tmp/all.log

logcat 詳解:

[filterspecs]  以<tag>[:priority]序列形式顯示指定priority及其以上,指定tag的日志,未指定tag的部分則按默認輸出日志

-b <buffer>
    用于指定要操作的日志緩沖區:system,events,radio,main.系統默認的是system和main 。該選項可以出現多次,以指定多個日志緩沖區。例:
  adb logcat -b system -b main -b events -b radio -s MyActivity:i
     日志輸出會指明當前查看的日志緩沖區如:
     --------- beginning of /dev/log/radio
     --------- beginning of /dev/log/events
     --------- beginning of /dev/log/system
     --------- beginning of /dev/log/main

-v <format>  設置log打印格式
    brief — 顯示prority/tag,產生日志的進程ID,和日志消息(默認格式)。
    process — 顯示priority,產生日志的進程ID,和日志消息
    tag — 顯示prority/tag,和消息
    thread — 顯示priority,線程ID和日志消息
    raw — 只顯示消息
    time — 顯示日期時間,priority/tag,產生日志的進程Id,和日志消息
    long — 顯示所有信息,日志消息另起一行顯示,且每個日志間空一行

    log文件抓取方式:
    #實時打印
    logcat main # APP日志
    logcat radio # 無線/電話相關(網絡,GMS)
    logcat events # 事件相關(process打開,關閉,Activity,service狀態等)
    logcat system # 系統日志
    tcpdump # 網絡通信方面log抓取
    QXDM  #高通平台有,主要是Modem射頻網絡相關的log,同radio但更強大,沒怎麼接觸,不熟悉
   
    #狀態信息
    adb shell cat /proc/kmsg # kernel日志,每cat一次清零
    adb shell dmesg # kernel日志,開機信息.(var/log/demsg)
    adb shell dumpstate # 系統狀態信息,比較全面,如:内存,CPU,    log緩存等。可以幫助我們确定是否有内存耗光之類的問題
    adb shell dumpsys # 系統service相關信息
    adb bugreport # 包括上面所有狀態信息
  -c 清除所有log并退出
  -d 得到所有log并退出 (不阻塞)

2、使用I,V,D,E,F,W 等過濾

adb logcat *:I    //顯示所有優先級大于等于“info”的日志
adb logcat *:V//顯示所有優先級大于等于“verbose”的日志
adb logcat ActivityManager:I  *:S  //僅輸出标記為“ActivityManager”且優先級大于等于“Info”的日志

3、分類展示

adb logcat -s papaya  //顯示 papaya 的日志信息
adb logcat -v tag  //按照标簽來打印日志信息
adb logcat -v thread  // 顯示 I,D,E等日志類型的進程ID、線程ID

4、grep 過濾(windows 可用find代替)

adb logcat | grep PID  //根據進程id來過濾
adb logcat | grep -i myapp  //根據字符串來過濾,并忽略大小寫
adb logcat | grep "^..MyApp"  //僅匹配 tag 過濾, tag 是一行開頭的第三個字符開始


各種 log 預設存放位置:

2、anr log
  adb pull /data/anr
 
  3、tombstone log
  adb pull /data/tombstones
 
  4、core log
  adb pull  /data/log/core
 
  5、開機log
  adb shell dmesg > dmesg.txt
 
6、logcatch
  adb pull /data/logcatch
 
  7、qxdm log
  adb pull /sdcard/logs

9、bugreport
  adb bugreport > bugreport.txt
 
  10、kernel log(只有從當前時間起的很少的log)
  cat proc/kmsg > kmsg.txt
 
  11、其他
adb shell dumpstate //各類信息,比如進程信息,内存信息,進程是否異常,kernnel的log等
  dumpstate會打印很多有用的信息,我們也可以執行單獨命令打印想要的部分信息,如通過“/system/bin/top -n 1 -d 1 -m 30 -t”獲取CPU信息,但我現在對這個用得還不多,不是很熟悉,就不多說了,貼部分内容以供參考.

adb shell dumpcrash
  adb shell dumpsys  //查詢所有service的狀態


新手上路,怎麼分析用QXDM從手機捉取的一些log,特... - 問通信專家 - https://goo.gl/We4NJy
怎麼抓取Android日志文件 | Andy.Lee's Blog - https://goo.gl/q3Jsp1

1 意見:

  1. 新版 Android 都可以直接用 logcat 抓 kernel log 哦:adb logcat -b kernel
    (至少 Android 4.4 之後的版本就有支援)

    回覆刪除

 
Blogger Templates