adb 之日志文件分析(五)

一,logcat日志文件

  1,addroid日志系统提供了记录和查看系统调试信息的功能,日志都是从各种软件和一些系统的缓冲区(内存)中记录下来的,缓冲区可以通过logcat命令来查看和使用

  2,在开发者选项中,有个选项叫做“日志记录器缓冲区大小”,默认是256K,日志是循环写入到缓冲区的,在通常情况下,写满是最旧的日志会被删除,给新的日志留存空间  

  3. logcat 日志是以 beginning of xxx 开头的

  4,logcat缓冲区:android log输出量很大,特别是通信系统的log,因此adroid把log输出到不同的缓冲区,目前定义了4个log的缓冲区:

    radio:输出通信系统的log       通信系统如:蓝牙,wifi,3g、4g等

    system:输出系统组件的log      系统组件的权限比较高,和系统相关的都会产生日志

    events: 输出event模块的log      这个是事件模块,只有是手机对手机的操作都会产生事件

    main : 所有java层的log    只要是java语言编写的,都是产生log,他不属于上面的3层内容

    默认log输出(不指定缓冲区的情况下)是输出到system和main缓冲区的log

  5,抓取通信设备的log:  adb logcat -b radio > d:\test\radio.log   如果不加-b 会默认抓取main日志

  6,抓取main模块的日志:adb logcat > d:\test\main.log  这里抓取的日志不显示时间,那么怎么显示时间呢?用如下命令

    adb logcat -v time > d:\test\main_time.log

    

 

 

  7,日志的输出格式:由五部分组成,如图:

      

 

 

      a,写下日志的时间,如:04-03 13:58:17.146

      b,优先级,在android中,日志的优先级从低到高分以下几种

          V---Verbose(啰嗦,最低级别,开发调试中一些详细的信息,在开发中使用,不可在发布产品中使用)

          D---Debug(调试,用于调试信息,可在发布产品中关闭,比较常见)

          I--info(信息,一般是提示性的信息)

          W--Warning(警告)

          E--Error(错误,已经出现可影响运行的错误,如应用crash时输出的日志)

      c,标签(tag),表明日志发起者和方便日志的过滤筛选,如图中所示

      d,PID(进程ID),如图中所示4513

      e,正文,本日志的主体内容

      每一行的日志都由这些内容组成

   8,崩溃事件,在手机的体现为:

      很抱歉,“xxx”已经停止运行了------因为没有相应的app复现,所以只能手写,无截图

      这是崩溃,不是闪退,闪退没有提示框,都是crash 错误

      我们可以把日志打印出来:adb logcat -v time > > d:\test\main_crash.log

      在日志中我们可以搜索EXCEPTION这个关键字,用来找到具体错误的内容

      

 

 

   9,anr事件,在手机上的体现为:

      

 

    说明:anr全名是application not responding,也就是应用无响应,当操作在一段时间内系统无法处理时,系统层面会弹出上图的ANR对话框

       1,为用户在主线程长时间被阻塞时提供处理交互,提高用户体验

       2,android系统一种自身检测机制

    日志:adb logcat -v time >d:\test\main_anr.log

    定位日志:搜索ANR in  如图

    

 

    下面还有load:负载情况

    接着下面是cpu的使用率

    

 

    

 

 

    这里的日志给开发还不能够定位问题,开发 要定位问题就找到方法调用栈,那么这里并没有方法调用栈,不过通过这里可以了解是否CPU原因产生的

    在这个日志中我们可以看到下图的输出:  

    

     这说明anr的日志在系统的/data/anr/traces.txt目录下,通过这个命令就可以看tracse.txt中的日志,但是这里并不全,而且还非常多

    

 

     那么我们可以使用adb pull 命令把让拉取出来

    

 

    在这个日志中可能和adb logcat出现时间差,如果日志在3s内,就没问题,如果时间太长,就是需要重新找自己需要的日志,为什么时间会有差别,是因为adb logcat和main模块两个是不同的模块,不会同步

    在traces.txt日志中我们可以搜索TIMED_WAIT,就可以找到方法调用栈,这不是我们可以分析的,直接给开发就可

     

 

    所以要提交bug,需要提交logcat文件和tracse文件,tracse这个文件只会保留最新的anr信息,新的anr信息会把原来的anr信息覆盖掉,所以我们在测试的时候,如出现多次anr信息,我们就要用到dropbox

      我们可以使用adb shell 进入到android系统中,然后执行cd /data/system/dropbox 进入到dropbox中

    

 

    我们可以通过adb pull 把这些文件都拉取出来分析,这里既可以分析anr,也可以分析crash,万能的

    我们可以通过时间来判断哪些是先产生的,哪些是后产生的

    

 

    

      

    

  

posted @ 2020-04-03 17:02  老僧观天下  阅读(3110)  评论(1编辑  收藏  举报