【adb】- logcat使用

簡介

ADB,即 Android Debug Bridge,它是 Android 開發/測試人員不可替代的強大工具。

對于開發人員來說,Android Studio已經提供了強大的日志查看,過濾等功能。那為什么我們還要了解logcat這個命令呢?

在有些情況下,電腦沒有安裝開發工具,或者調試一些小問題的時候,我們只需要查看一條簡單的日志就能夠確定問題所在,那么這個時候,使用logcat會節省很多時間。

在比如,測試一般不會安裝Android開發工具,如果不了解logcat,就很難快速定位問題,對于有些功能不能做更加精確的測試。

參考

awesome-adb

日志工具

  • Android Studio
    Android開發工具,自帶強大的日志查看工具。
  • DDMS
    Android SDK下tools文件夾下的一個工具,不需要安裝Android Studio,但是需要安裝Java Sdk,DDMS同樣具備強大的日志等功能,在命令行執行“monitor”可執行程序,可以打開。
  • adb logcat
    adb是Android SDK中platform-tools文件夾下的一個工具,路徑是:“/sdk/platform-tools/adb”。使用這種方式比上面簡單很多,只需要電腦上有“adb”可執行文件,然后使用adb命令即可。adb文件下載鏈接:密碼:xxx1 ,如果下載失效,找你們的研發要一個即可。

adb logcat

  • 格式:[adb] logcat [<option>] ... [<filter-spec>] ...
    如果提示no matches found:*:W之類錯誤,請給參數加上引號。
Android 的日志分為如下幾個優先級(priority):
  • V —— Verbose(最低,輸出得最多)
  • D —— Debug
  • I —— Info
  • W —— Warning
  • E —— Error
  • F —— Fatal
  • S —— Silent(最高,啥也不輸出)
按級別過濾日志

將該級別及以上的日志輸出,例如:

  • adb logcat *:W
    1. *:作為tag參數,這里指所以的tag
    2. W:作為優先級(priority)參數

即:adb logcat <tag>[:priority]。上面命令會將 Warning、Error、Fatal 和 Silent 日志輸出。

按 tag 和級別過濾日志

<filter-spec> 可以由多個 <tag>[:priority] 組成。如果我們只想打印某tag的日志,那么可以像下面這樣寫:

  • adb logcat StudyTaskCountDownTime:V *:S

    1. StudyTaskCountDownTime:V
      • 打印tag為StudyTaskCountDownTime,日志級別為V及以上的日志。
      • 打印其它tag所以級別的日志
    2. *:S
      • 打印所以tag的S級別的日志(視無日志打印)

    那么StudyTaskCountDownTime:V 和 *:S合并起來就是:只打印tag為StudyTaskCountDownTime,日志級別為V及以上的日志。

日志格式

adb logcat -v <format>

brief(默認)
  <priority>/<tag>(<pid>): <message>
process
  <priority>(<pid>) <message>
tag
  <priority>/<tag>: <message>
raw
  <message>
time
  <datetime> <priority>/<tag>(<pid>): <message>
threadtime
  <datetime> <pid> <tid> <priority> <tag>: <message>
long
  [ <datetime> <pid>:<tid> <priority>/<tag> ]
<message>

例如:adb logcat -v long ActivityManager:I *:S

清空日志
  • adb logcat -c
內核日志
  • adb shell dmesg
    非root設備執行報權限拒絕。

adb logcat |grep

grep 指令用于查找內容包含指定的范本樣式的文件,如果發現某文件的內容符合所指定的范本樣式,預設 grep 指令會把含有范本樣式的那一列顯示出來。若不指定任何文件名稱,或是所給予的文件名為 -,則 grep 指令會從標準輸入設備讀取數據。

參考grep

  • 語法
    grep [-abcEFGhHilLnqrsvVwxy][-A<顯示列數>][-B<顯示列數>][-C<顯示列數>][-d<進行動作>][-e<范本樣式>][-f<范本文件>][--help][范本樣式][文件或目錄...]
    

管道(|)和grep結合,打印一行中包含某字符串的日志,例如:

adb logcat | grep StudyTaskCountDownTime

一行中包含了StudyTaskCountDownTime字符串的日志,加“-i”可以忽略大小寫。grep支持正則表達式,可以寫出更高級的過濾規則。

設置匹配字符串顏色
  • adb logcat | grep --color=auto -i StudyTaskCountDownTime,--color取值有:never、always、auto。always和auto。
顯示同一個進程的所有輸出
  • adb logcat | grep –color=auto pid
清緩存并執行

logcat 有緩存,如果僅需要查看當前開始的 log,需要清空之前的。

  • adb logcat -c && adb logcat
過濾 log 文件

有時需要分析 log 文件,過濾 log 文件還是使用 grep。例如 log 文件為 myapp.log,要匹配 tag 為 MyApp 和 MyActivity 的輸出,然后輸出到 newmyapp.log:

   cat myapp.log | grep "^..MyApp\|^..MyActivity" > newmyapp.log

"^..MyApp\ | ^..MyActivity"根據tag在一行中的位置,通過正則表達式來匹配的,所以要更加自己的需要書寫。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。