zoukankan      html  css  js  c++  java
  • (二)logcat/trace.txt日志文件的分析

    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: estlog_radio.txt       -- 重定向输出日志

    3.logcat日志文件分析

    输出的日志格式如下:

    3.1由5部分组成:

    >写下日志时的时间

    日志中添加时间:adb logcat   -v  time   >  D: estlog.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: est

    注意:

    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: est

    说到底,如果app出现问题的话logcat系统级别的日志(adb logcat   -v  time   >  D: estlog.txt )  会体现出来,除非开发做了异常捕获,那就需要问开发是不是做了异常捕获,捕获到了哪里~

  • 相关阅读:
    [转]Javascript中prototype和constructor详解
    [转]SCIM输入启动遭遇“Failed to load x11 FrontEnd module. ”错误
    [转]搭建高效的symbols服务器
    编译 boost 1.52.0
    opensuse 11.4 安装slickedit 2012 完美支持中文
    【转】MyEclipse 6.5 大提速
    [转]VS2005生成pdb签名的问题
    理解泛型 从需求演变开始
    数学中一个很简单的组合 但用程序如何去实现呢?
    从零开始开发服务器控件
  • 原文地址:https://www.cnblogs.com/kxx-1/p/13174331.html
Copyright © 2011-2022 走看看