清除终端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 ——> 帮助
2、am start
-n表示组件;-a表示动作;-d表示传入的数据;-t表示传入的类型
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 ——> 打开网址;
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" *