清除终端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" ——> 剔除不符合条件taglog

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 ——> 打印日期,时间,优先级/标记,PIDTID


得到filter过滤tagXX的日志信息:——> 匹配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 — 显示优先级/标记,消息线程的PIDTID

raw — 显示原始的日志信息,没有其他的元数据字段

time — 显示日期,调用时间,优先级/标记,PID

threadtime — 显示日期,调用时间,优先级/标记以及发出消息的线程的PIDTID

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 ——> 查看包含无线装置/电话相关消息的缓冲区


过滤进程$pidLog

方法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)

1adb shell am -help ——> 帮助

2am start:

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表示传入的类型

3am startservice ——> 启动服务

4am broadcast -a <广播动作> ——> 发送一个广播



5.pm命令(PackageManager)

1adb shell pm ——> 帮助

2adb shell pm list packages ——> 显示所有已安装的包名

3adb 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" *