标签:log 使用 fat erb 体验 优先 异常捕获 目录 依次
1.logcat日志文件
>android日志系统提供了记录和查看系统调试信息的功能,日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过logcat命令来查看和使用
使用方式:
adb logcat [<option>]...[<filter-spec>]..
>logcat是以如下开头的:
---------beginning of xxx
>开发者选项,有个叫做“日志记录器缓冲区大小”,默认是256k,日志是循环写入环形缓冲区的,通常情况下,写满时最旧的日志会被删除以给新输出的日志留内存空间
2.log缓冲区
android log输出量巨大,特别是通信系统的log,因此android把log输出到不同的缓冲区。
目前定义了四个log缓冲区:
Radio:输出通信系统的log 如,nfc、3G/4G 蓝牙、wifi等
System:输出系统组件的log 如,调用摄像头等
Events:输出event模块的log 如,触摸事件、按键事件
Main:输出java层的log(不属于上面三层的log),测试app过程着重关注Main模块
注意:
默认输出Main缓冲区log,如想输出通信系统的log:
adb logcat -b radio > D:\test\log_radio.txt -- 重定向输出日志
3.logcat日志文件分析
输出的日志格式如下:
3.1由5部分组成:
>写下日志时的时间
日志中添加时间:adb logcat -v time > D:\test\log.txt
>优先级,在Android中,日志的优先级从低到高分以下几种:
V--verbose(啰嗦,最低级别,开发调试中的一些详细信息,仅在开发中使用,不可在发布产品时使用)
D--Debug(调试,用于调试的信息,可以在发布产品中关闭,比较常见)
I--Info(信息,一般提示性的消息)
W--Warning(警告)
E--Error(错误,已经出现可影响运行的错误,比如应用crash时输出的日志)
>标签(tag),标明日志发起者和方便日志的过滤筛选,如上中的ActivityManger,开发自己定义的,方便查找
> PID(进程ID),如上中的491
>正文,本日志的主体内容
3.2 crash崩溃
>现象:提示xx停止运行
>如何在日志中检索?
出现崩溃后,输出最新日志,搜索 FATAL EXCEPTION关键字(代表严重错误)、crash关键字 ,然后将找到的E级别日志(方法调用栈)全部提交给到开发
3.3ANR无响应
>现象:当操作在一段时间内系统无法处理时,系统层面会弹出下图那样的ANR对话框
>为用户在主线程长时间被阻塞时提供处理交互,提高用户体验
>Android系统一种自身检测机制
>如何在日志中检索?
出现ANR后,输出最新日志,搜索ANR in 关键字,但是根据E级别日志开发往往不能定位ANR问题,需要找到上图红框中标出的traces.txt文件,从而找到方法调用栈,使得开发能够定位问题
>>如何找到traces.txt?
adb shell
cd /data/anr
ls
找到traces.txt 文件,exit
拉取到本地:adb pull /data/anr/traces.txt D:\test
注意:
traces.txt时间和缓冲区日志时间会有差异(几秒),因为属于两个不同的模块,系统不会同步写
traces.txt只能保留最近一次的anr信息
>解决只能保留最近一次的anr信息的方法,dropbox :
adb shell
依次找到 /data/system/dropbox 目录,如图:
data_app开头的是第三方手动安装的应用异常信息,然后就可以把/data/system/dropbox目录拉取出来然后给到开发人员
===============================================
需要说明的是:
>安卓手机碎片化严重,不能保证每台手机都有Dropbox
>不是所有手机都是root权限
上述两种情况下:
其实直接把traces.txt 文件拉取出来就好:adb pull /data/anr/traces.txt D:\test
说到底,如果app出现问题的话logcat系统级别的日志(adb logcat -v time > D:\test\log.txt ) 会体现出来,除非开发做了异常捕获,那就需要问开发是不是做了异常捕获,捕获到了哪里~
标签:log 使用 fat erb 体验 优先 异常捕获 目录 依次
原文地址:https://www.cnblogs.com/kxx-1/p/13174331.html