赞
踩
1.手机进入setting-about phone-build number 点到developer
2.进入拨号页面,输入*#*#873733284#*#*
3.右划进入log and debugging 选择debugloggerui,将除了第一个全部都关闭,只留下一个mobilelog,然后点击录制,在录制之前,记得把以前录制的log删除掉,在进行录制
4.adb pull data/debuglogger
(pull log需要完整路径:adb pull /storage/emulated/0/debuglogger)
5.抓取的log存储在执行所在目录下。
logcat抓log(实时log)
adb logcat -G 30M;adb logcat -c ;adb logcat>~Downloads/test.txt
adb logcat -G 30M && adb logcat -c && adb logcat | grep -iE "ASD"抓实时log的命令
清空日志缓存信息 : 使用 adb logcat -c 命令, 可以将之前的日志信息清空, 重新开始输出日志信息;
将缓存日志输出 : 使用 adb logcat -d 命令, 输出命令, 之后推出命令, 不会进行阻塞;
输出最近的日志 : 使用adb logcat -t 5 命令, 可以输出最近的5行日志, 并且不会阻塞;
实时log
开log的暗码*#*#873733284#*#*
3.右划进入log and debugging 选择debugloggerui,将除了第一个全部都关闭,只留下一个mobilelog,然后点击录制,在录制之前,记得把以前录制的log删除掉,在进行录制
adb pull data/debuglogger/mobilelog ~/android/work/log/668
adb logcat -c
adb logcat -G 32M
adb logcat > ~/hjy/log/open_camera.log
暗码 *#*#3646633#*#* / *#*#873733284#*#*
*#*#0661#*#*
*#*#86436#*#*
点击拍照 onSnapClick
确认拍照模式 takePicture
hal submitRequest(2是拍照流) captureIntent:2
notify shutter(通知快门) onCaptureStarted
尝试保存缩略图 image save try to create thumbnail
开始更新缩略图 postUpdateThumbnail
缩略图显示完成 CAM_PreviewSaveRequest: image save finished
APP 从hal收到所有yuv/raw Data ready and all of the images are available
拍照时间回滚 jpegCallback
to shot可进行下一次拍照 reset Status to Idle
算法后处理开始 algo process start
各后处理算法耗时 costTime|process time:
算法后处理结束,开始打包jpeg algo process finished
raw2yuv完成(超夜) onYuvAvailable
开始转JPEG jpeg process start
jpeg打包完成 onJpegAvailable
jpeg保存完成 saved image finished
connect call 相机apk调用framwork API到hal,发起实际连接关键字
poweron sensor上电中会告知sensor拍照和预览的图片大小,app会下发预览指令surfacetexture
sensorPowerOnCountInc 上电中间会有Hal层确认sensor id的打印
configure 上电完成进行configure配置(配置中用SensorSettingPolicy查看sensor的信息)
first frame 第一帧到达
captureIntent:1 预览流请求
onsnapclick 拍照(下面步骤同上)
Main log
通过adb logcat输出的main log文件,每一行都是以如下格式作为开头信息
格式:timestamp PID TID log-level log-tag
Event log输出格式
通过adb logcat输出的event log文件,每一行都是以如下格式作为开头信息
格式:timestamp PID TID log-level log-tag tag-values
V—Verbose(啰嗦,最低级别,开发调试中的一些详细信息,仅在开发中使用,不可在发布产品中输出,不是很常见,包含诸如方法名,变量值之类的信息)
D—Debug(调试,用于调试的信息,可以在发布产品中关闭,比较常见,开发中经常选择输出此种级别的日志,有时在beta版应用中出现)
I—Info(信息,该等级日志显示运行状态信息,可在产品出现问题时提供帮助,从该级别开始的日志通常包含完整意义的英语语句和调试信息,是最常见的日志级别)
W—Warning(警告,运行出现异常即将发生错误或表明已发生非致命性错误,该级别日志通常显示出执行过程中的意外情况,例如将try-catch语句块中的异常打印堆栈轨迹之后可输出此种级别日志)
E—Error(错误,已经出现可影响运行的错误,比如应用crash时输出的日志)
F—Fatal(严重错误,比error级别更高,目前我只在android系统内核发出的日志中看到此种级别。在Android6.0以前表明开发者认为绝对不应该出现的错误,在此以后一般开发场景下绝不应该输出此种级别的日志)
S—Silent(寂静,最高级别,没有一条日志会属于这个级别,仅仅作为关闭logcat输出的过滤器参数)
示例中日志等级显示为W,表示警告级别。
除标记和优先级外,日志消息还包含许多元数据字段。您可以修改消息的输出格式,以便它们显示特定的元数据字段。为此,您可以使用 -v 选项,并指定下列某一受支持的输出格式。
启动 Logcat 时,您可以使用 -v 选项指定所需的输出格式:
[adb] logcat [-v <format>]
Crash 分为3种:未捕获异常、ANR(app未响应)、闪退(NDK)
未捕获的异常:将输入控制台
ANR:在data/anr生成一个traces.txt文件,存:异常的堆栈和线程信息
应用闪退:NDK引发错误。
一、 log文件的产生(Fatal/ANR)
1. 程序异常退出(fatal)
2. 程序强制关闭(fatal)
3. 程序无响应(Application No Response--ANR)
4. native层:Tombstone crash
5. Kernel层:kernel panic
出现情况有一下两种:
1. 界面操作按钮的点击等待时间超过5s
2. HandleMessage回调函数执行超过10s,BroadcasterReciver里的onRecive()方法超过10s
二、 log文件包含内容
1. 系统基本信息,包括内存,cpu,进程队列,虚拟内存,垃圾回收等信息
2. 事件信息,即主要分析的信息
3.虚拟机信息,包括进程的、线程的跟踪信息
三、 观看log文件的步骤
1.如果是ANR问题,搜索ANR IN定位到关键事件信息
2.如果是Force closed或其他异常信息,搜索fatal exception,定位到关键事件信息
3. 定位到关键事件信息后,如果信息不明确,在去搜索应用程序包的虚拟机信息,查看具体的进程和线程跟踪日志来定位到代码。
是让我们确认问题到底发生在那个线程中,是主线程还是子线程,这个的判断依据是:如果PID和TID相同,恭喜你问题出在父亲这边,看样子问题还比较好办。如果PID和TID不相同,那么您悲剧了,问题出在子线程中。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。