Android adb logcat 基本用法教學

本篇教學介紹如何在 Android 下使用 adb logcat 指令,adb logcat command line tool 是開發 Android 時常常用到的工具,使用 adb logcat 指令會 dump 出系統的 log 日誌訊息,包含 stack traces,當 andorid 裝置噴出錯誤訊息時,你可以使用 adb logcat 即時地觀看系統訊息,以便輔助開發除錯。

adb 指令的安裝方式可以參考這篇

使用 adb logcat 前,先開啟 USB 偵錯模式

使用 adb logcat 功能時,通常要將 android 裝置開啟 USB 偵錯模式,中文介面的路徑如下:

1
設定 > 開發人員選項 > USB 偵錯

英文介面的路徑如下:

1
Settings > Advanced > Developer options > USB debugging

如果找不到開發人員選項需要另外開啟這功能,中文介面的路徑如下:

1
Settings > 關於手機 > 版本號碼 (連續快速7點次)

英文介面的路徑如下:

1
Settings > About Phone > Build number (連續快速7點次)

點完之後它會提示你已經是開發人員了,之後就會顯示開發人員選項
也可參考這篇

adb logcat 指令基本教學

使用 adb logcat 的方式有兩種,一種是直接執行 adb logcat,

1
$ adb logcat

另一種是先進入 android 的 shell 模式再輸入logcat。
通常是使用 adb logcat 發現 log 會遺失掉(使用無線傳輸),就會使用這種方式。

1
2
$ adb shell
$ logcat

adb logcat 指令選項

以下為常用的 adb logcat 指令,有想到在陸續增加吧!
adb logcat -c: 清除緩衝區,截至目前的log都會被清除
adb logcat -s: 設定過濾器,
例如,adb logcat -s MyActivity:W 表示顯示單一 tag MyActivity 且 log 等級不低於 Warning adb logcat -s MyActivity:V ActivityManager:V 表示顯示多重 tag MyActivity 且 log 等級不低於 Verbose 與 ActivityManager 且 log 等級不低於 Verbose,以下為各種 log 等級縮寫與全名,

1
2
3
4
5
6
7
V: Verbose (lowest priority)
D: Debug
I: Info
W: Warning
E: Error
F: Fatal
S: Silent (highest priority, on which nothing is ever printed)

adb logcat -f: 將log輸出到指定的檔案
adb logcat -D: 在不同的log之間加上分隔線
adb logcat -g: 取得目前緩衝區的大小
adb logcat -G <size>: 設定緩衝區的大小
adb logcat -t <count>:
adb logcat -t <time>:
adb logcat -T <count>:
adb logcat -T <time>:
adb logcat -v <format>: 設定日誌輸出格式,預設的是threadtime格式,可用的選項如下,

  • brief: 顯示優先順序,標籤和程式PID
  • long: 顯示所有的metadata欄位並且用空行分隔訊息內容
  • process: 只顯示程式PID
  • raw: 顯示原始的日誌資訊,沒有其他的metadata欄位
  • tag: 只顯示優先順序與標籤
  • thread: 顯示程式PID與執行緒TID
  • threadtime (預設): 顯示日期,時間,優先順序,標籤,程式PID, 執行緒TID
  • time: 顯示日期,時間,優先順序,標記,程式PID

例如: adb logcat -v time 表示使用 time 輸出格式,只能指定一種格式。

adb logcat 常用進階技巧

將 adb logcat 輸出重新導到指定的檔案

1
adb logcat > aaa.log

將 adb logcat 輸出導到 grep 來搜尋特定關鍵字,
詳細的 grep 用法可以參考這篇

1
adb logcat | grep xxx

Windows 下請改用 findstr

1
adb logcat | findstr xxx

將 adb logcat 輸出導到 grep 來搜尋多重關鍵字,
詳細的 grep 用法可以參考這篇

1
adb logcat | grep -E 'aaa|bbb|ccc'

將 adb logcat 輸出用 tee 導到指定的檔案也同時使用 grep 來搜尋特定關鍵字,
詳細的 tee 用法可以參考這篇

1
adb logcat | tee aaa.log | grep xxx

adb logcat lines missing 的原因

當 android adb logcat 出現 identical 5 lines 這種訊息時表示 adb logcat 發現相鄰的 log 內容完全相同,
為了增進 log 的效能,從 Android O 開始 Log 的 chatty 機制會把重複內容去掉換成是 identical 5 lines 這樣的 log,告訴開發者省略了 5 行內容。
如下所示,代表 AAA 行程的 log 被省略了 5 行。

1
2020-06-24 22:00:00.000 10123-10123 I/chatty: uid=10500 AAA identical 5 lines

關掉這個功能的方法:目前還沒找到方法可以關掉它。

參考
Logcat command-line tool | Android Developers
https://developer.android.com/studio/command-line/logcat
adb logcat 指北_敲鍵盤的呼倫貝爾人-CSDN博客_logcat -l
https://blog.csdn.net/kennethyo/article/details/76603228
Appdome | Gathering Android Device Logs Using ADB - Appdome
https://www.appdome.com/no-code-mobile-integration-knowledge-base/gathering-android-device-logs-using-adb/
西加加 Android: [Android] adb logcat使用方法
http://pianovv510.blogspot.com/2013/07/android-adb-logcat.html
Android logcat lines missing原因分析 - 庚拓天下 - 博客園
https://www.cnblogs.com/genggeng/p/10706379.html

其他技巧推薦

如果你是常常在Android adb shell下做事情的話,尤其是需要使用到vi,建議安裝busybox,使用busybox附帶的vi會方便很多,
如果還想知道busybox支援哪些指令或busybox基本用法的話請看這篇
其他的 Android 系列文章可以看這篇
下一篇來介紹Android fastboot指令的安裝與用法教學吧~