本篇教學介紹如何在 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
7V: 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
: 顯示優先順序,標籤和程式PIDlong
: 顯示所有的metadata欄位並且用空行分隔訊息內容process
: 只顯示程式PIDraw
: 顯示原始的日誌資訊,沒有其他的metadata欄位tag
: 只顯示優先順序與標籤thread
: 顯示程式PID與執行緒TIDthreadtime (預設)
: 顯示日期,時間,優先順序,標籤,程式PID, 執行緒TIDtime
: 顯示日期,時間,優先順序,標記,程式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 下請改用 findstr1
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指令的安裝與用法教學吧~