Adb抓取日志并分析
- 1.缓冲区的类型
- 2.认识输出日志信息
- 3.日志的优先级及指定输出
- 4.控制日志的输出格式
- 5.抓取指定apk的日志
- 6.日志异常查找
1.缓冲区的类型
Android 日志系统为日志消息保留了多个循环缓冲区,不是所有的消息都被发送到默认缓冲区,要想查看这些附加的缓冲区,可以使用 -b选项,查看指定的缓冲区:
adb logcat [-b <buffer>]
buffer可以有如下选项:
Radio 查看包含在通信系统的log,如蓝牙、wifi、打印.
Events 查看事件相关的消息,比如启动应用,停止文件 事件.
Main 查看主缓冲区、所有Java层的log(默认缓冲区).
System 输出系统组件的log(默认缓冲区).
ps:默认使用 【adb logcat】会输出Main及System缓冲区的log信息。
2.认识输出日志信息
一般使用默认 【adb logcat】 输出的日志、格式如下:
大概就是显示:时间 、进程Id=1164、 线程Id=1181、优先级=D、标签(tag)=WindowManger : message
3.日志的优先级及指定输出
1)日志的等级由小到大为:
V--明细(view)
D--调式(debug)
I--信息(information)
W--警告(warm)
E--错误(error)
F--严重错误(fail)
S--无记载
所以,如果要减少logcat 的输出日志,可以使用如上条件进行过滤、可用多个表达一起限制。
2)过滤表达式的格式为【tag:prority 】、同一个tag可以有不同的优先级.
如:adb logcat ActivityManager:I WindowManager:D *:S
ps:如上会输出 ActivityManager等级大于I的信息、以及 WindowManager等级大于D的信息, 然后 *:S则会过滤其他tag的所有信息,所以最终日志仅会输出ActivityManager和WindowManager的日志。
当然也可以仅过滤某一优先级、如下:最终会输出优先级大于W的所有tag的日志信息。
如【adb logcat *:W】,*代表输出所有tag、过滤优先级大于W的日志信息.
4.控制日志的输出格式
日志消息在标记和优先之外还有很多其他字段,这些字体可以通过修改输出格式来控制输出结果,可以用 【adb logcat -v < format > 】指定日志输出格式。
总体来说,< format >可以有 【brief、process、tag、raw、time、thread、long】等选项,具体的输出格式可以参考
5.抓取指定apk的日志
格式:adb logcat | find "包名“ >电脑地址
adb logcat | find "com.cmic.college" >d:\log.txt
怎么获取包名??
6.日志异常查找
(1)应用程序未响应、又叫anr异常
一般遇到这种异常,就可以在logcat的日志里直接搜索”ANR in",但其实日志多反应不出产生的原因,具体可以产看traces.txt文件,进行分析。
traces.txt文件是一个ANR记录文件,用于开发人员调试,目录位于/data/anr中
,无需root权限即可通过pull命令获取,下面的命令可以将traces.txt文件拷贝到当前目录下
adb pull /data/anr/traces.txt d:\
关于产生ANR的原因可以参考
(2)一般程序异常、可以考虑搜索tag=E 的内容,或者是在logcat日志里试着搜索Exception、或者搜索关键的词语,比如一个app无法在夜神模拟器中登录、并提示如图:
这时候我们可以考虑搜索 102208 来查看相关日志.
ps:使用夜神模拟器经常遇到的问题就是【夜神模拟器连不上adb】