清除終端log緩存:adb logcat -c -b main -b events -b radio -b system -b crash
adb Bug定位過濾:
1.查看logcat信息:
adb logcat
adb logcat --help ——> 幫助
grep命令:
用於過濾/搜索的特定字符
grep --help ——> 查看grep幫助
-E ——> 指定字符串做為查找文件內容的樣式,一個可擴展的正則表達式;
-r ——> 指定要查找的目錄或文件(默認當前目錄);
-i ——> 忽略字符大小寫;
-v ——> 顯示不包含匹配文本的所有行(剔除);
-l ——> 顯示符合指定的內容樣式的文件名稱;
-n ——> 顯示行數編號;
指定文件:
grep "tag" ./filename
grep "tag" ——> 過濾帶有tag的字符串
grep -E "tag1|tag2|..." ——> 過濾帶有tag1|tag2|...的字符串
grep -i "tag" ——> 忽略tag大小寫
grep -i -E "tag1|tag2|..." ——> 忽略tag1|tag2|...大小寫
grep -v "tag" ——> 剔除不符合條件tag的log
grep -v -E "tag1|tag2|..." ——> 剔除不符合條件tag1|tag2|...的log
-r默認當前目錄:
grep -r "tag" *
grep -r -E "tag1|tag2|..." *
grep -rni "tag" *
grep -rni -E "tag1|tag2|..." *
grep -rni -E "tag1|tag2|..." * > log.txt
adb logcat | grep MyApp ——> 過濾出帶有MyApp字符串的log日志信息
adb logcat | grep -i myapp ——> 忽略字符串大小寫
adb logcat -v threadtime | grep -E "tag1|tag2|..." ——> 顯示匹配多字符串的log
adb logcat -v threadtime | grep -i -E "tag1|tag2|..."
——> 顯示忽略大小寫且匹配多字符串的log
adb logcat -v threadtime | grep -v -E "tag1|tag2|..." ——> 剔除不符合條件tag1|tag2|...的log
使用-f,-d,-s,-v,-b格式:
-f ——> 輸出日志到到sd卡
-d ——> 一次性輸出日志到屏幕上,自動終止返回
-s ——> 設置tag,默認的過濾級別為Silent
-v ——> 設置日志消息的輸出格式
-b ——> 查看日志消息的緩沖區
adb logcat -f /sdcard/log.txt ——> 一直寫入,退出設備或Ctrl + c終止
adb logcat -d ——> 一次輸出日志到屏幕上后終止
adb logcat -v threadtime ——> 打印日期,時間,優先級/標記,PID和TID
得到filter過濾tag為XX的日志信息:——> 匹配tag(-Log.i("XX")-)為XX字符串的日志信息
adb logcat ActivityManager:I WindowManager:D *:S
adb logcat -s ActivityManager:I WindowManager:D
——> 輸出標記為"ActivityManager"並且優先級大於等於"Info"和標記為"WindowManager"並且優先級大於等於"Debug"的日志
adb logcat *:w
adb logcat -s *:w ——> 表示顯示所有優先級大於等於"warning"的日志
adb logcat -s *:w | grep -E "tag1|tag2|..." ——> 顯示匹配多字符串的log
adb logcat -s *:w | grep -i -E "tag1|tag2|..." ——> 忽略大小寫,顯示匹配多字符串的log
adb logcat -s XX > log.txt ——> 一直輸出日志保存在當前系統當前目錄下的log.txt文件中
adb logcat -d -s XX > log.txt ——> 一次輸出日志在當前系統當前目錄下的log.txt文件中后終止
優先級priority從低到高,XX就是以下系列函數中的tag標識:
V — Verbose (lowest priority) 對應於Log.i(tag)系列函數
D — Debug 對應於Log.d()系列函數
I — Info 對應於Log.i()系列函數
W — Warning 對應於Log.w()系列函數
E — Error 對應於Log.e()系列函數
F — Fatal 對應於Log.wtf()系列函數
S — Silent (highest priority, on which nothing is ever printed)
使用-v <format>格式:
[adb] logcat [-v <format>] ——> 啟動logcat來控制日志格式,注意只能在-v選項中指定一種格式
例如thread輸出格式:
adb logcat -v thread
日志消息在標記和優先級之外還有很多元數據字段,這些字段可以通過修改輸出格式來控制輸出結果,-v選項加上下面列出的內容可以控制輸出字段:
brief — 顯示優先級/標記和原始進程的PID (默認格式)
process — 僅顯示進程PID
tag — 僅顯示優先級/標記
thread — 顯示優先級/標記,消息線程的PID和TID
raw — 顯示原始的日志信息,沒有其他的元數據字段
time — 顯示日期,調用時間,優先級/標記,PID
threadtime — 顯示日期,調用時間,優先級/標記以及發出消息的線程的PID和TID
long — 顯示所有的元數據字段並且用空行分隔消息內容
使用-b <buffer>選項格式:
[adb] logcat [-b <buffer>]
主要有:
adb logcat -b crash ——> 查看crash的信息
adb logcat -b main ——> 查看主要的日志緩沖區
adb logcat -b events ——> 查看包含事件相關消息的緩沖區
adb logcat -b system ——> 查看system相關的信息
adb logcat -b radio ——> 查看包含無線裝置/電話相關消息的緩沖區
過濾進程$pid的Log:
方法1:
adb shell ps | grep -E "$package_name"
adb logcat -v threadtime | grep -E "$pid"
adb logcat *:W | grep -E "$pid"
方法2:
adb shell ps | grep -E "$package_name"
adb logcat --pid="$pid"
2.開關Log.isLoggable(LOG_TAG, Log.DEBUG)調試:
adb shell getprop ——> 顯示android系統所有配置信息屬性
adb shell setprop [key] [value]
adb shell setprop log.tag.YOUR_LOG_TAG [LEVEL]
adb shell setprop log.tag.LOG_TAG DEBUG ——> 開啟Log.isLoggable(LOG_TAG, Log.DEBUG)調試
adb shell setprop log.tag.LOG_TAG SUPPRESS ——> 關閉Log.isLoggable(LOG_TAG, Log.DEBUG)調試
3.dumpsys命令:
adb shell dumpsys ——> 顯示當前所有系統服務信息
adb shell dumpsys | grep "DUMP OF SERVICE" ——> 幫助
adb shell service list ——> 幫助
查看ActvityManagerService所有信息;
adb shell dumpsys activity ——> 查看ActvityManagerService所有信息
adb shell dumpsys activity package $package_name ——> 查看當前應用ActvityManagerService所有信息
adb shell dumpsys activity activities ——> 查看Activity組件信息
adb shell dumpsys activity top ——> 查看當前界面的UI信息(View Hierarchy)
adb shell dumpsys activity services ——> 查看Service組件信息
adb shell dumpsys activity providers ——> 查看ContentProvider組件信息
adb shell dumpsys activity broadcasts ——> 查看BraodcastReceiver信息
adb shell dumpsys meminfo ——> 查看系統進程內存信息分布情況
adb shell dumpsys meminfo $package_name(進程包名) or $pid(進程id)
adb shell dumpsys package ——> 查看安裝包信息
adb shell dumpsys package $package_name ——> 查看當前應用安裝包信息
輸出系統崩潰的log:
系統應用 ——>
adb shell dumpsys dropbox system_app_crash --print > crash.txt
adb shell dumpsys dropbox system_app_anr --print > anr.txt
第三方應用 ——>
adb shell dumpsys dropbox data_app_crash --print > crash.txt
adb shell dumpsys dropbox data_app_anr --print > anr.txt
4.am命令(ActivityManager):
1、adb shell am -help ——> 幫助
adb shell am start -a android.intent.action.CALL -d tel:10086 ——> 撥打電話;
adb shell am start -n com.android.browser/com.android.browser.BrowserActivity
adb shell am start -n com.android.browser/.BrowserActivity ——> 啟動瀏覽器;
adb shell am start -W com.android.browser/.BrowserActivity ——> 啟動Activity時間;
adb shell am start -a android.intent.action.VIEW -d http://www.baidu.com ——> 打開網址;
-n表示組件;-a表示動作;-d表示傳入的數據;-t表示傳入的類型
3、am startservice ——> 啟動服務
4、am broadcast -a <廣播動作> ——> 發送一個廣播
5.pm命令(PackageManager):
1、adb shell pm ——> 幫助
2、adb shell pm list packages ——> 顯示所有已安裝的包名
3、adb shell pm clear package_name ——> 對指定的package刪除所有數據
過濾關鍵log方法:
grep -r "FATAL EXCEPTION" *
grep -r "Fatal signal" *
grep -r "$package_name" *
grep -r "AndroidRuntime" *
grep -r "Exception" *
grep -r "System.err" *
grep -r "Fatal" *
grep -r "signal" *
grep -r "ANR" *
grep -ri "ANR" *
grep -r "ANR in $package_name" *
grep -r -E "FATAL EXCEPTION|ANR" *
grep -r "am_" *
grep -r "am_killed" *
grep -r "crash" *
grep -r "am_crash" *
grep -r "am_create" *
grep -r "am_finish" *
grep -r "am_destroy" *
grep -rE "am_create|am_destroy" *
grep -r "event" *
grep -ri -E "Notification" *