美文网首页
浅谈log定位分析

浅谈log定位分析

作者: 炸鸡测试 | 来源:发表于2020-07-01 17:26 被阅读0次

    小伙伴们每天测试的时候打开工程模式抓取mtklog,是否清楚抓取的都是一些什么类型的log呢?不同的问题出现时都查看的都是哪些log呢?

    遇到问题后想先定位一下问题,看到那么多密密麻麻的log不知道从何下手呢?

    一.log的类型

    1、按照android系统层次划分:

    android OS从上层到底层可以划分为如下:Application---Framework---Libraries---Linux Kernel

    (1)发生在Java层(Application,Framework)的异常:JE

    常见JE类型有:

    NullPointerException - 空指针引用异常

    ClassCastException - 类型强制转换异常。

    IllegalArgumentException - 传递非法参数异常。

    ArithmeticException - 算术运算异常

    ArrayStoreException - 向数组中存放与声明类型不兼容对象异常

    IndexOutOfBoundsException - 下标越界异常

    NegativeArraySizeException - 创建一个大小为负数的数组错误异常

    NumberFormatException - 数字格式异常

    SecurityException - 安全异常

    UnsupportedOperationException - 不支持的操作异常

    (2)发生在Native层(Libraries)的异常:NE

    (3)发生在kernel层的异常:KE,kernel log一般保存成文件被打包在db文件中

    2、log存储文件

    一般打开mtklog文件后,会生成几个文件,那每个文件分别代表什么类型的log文件呢?

    1、Mobile Log:也称AP Log:是系统应用层的log,比如应用无响应或强行关闭

      mobile log中有4种主要log文件:kernel ,main,events 和radio log

      kernel log主要是记录kernel相关的问题,如driver(相机,蓝牙,USB)出现问题

      events_log:系统事件日志,主要输出记录各个activity周期及事件

      sys_log:系统日志,Exception定位点

      radio_log:输出通话,网络状态变化

    2、modern log:是手机里负责搜网和sim卡数据操作底层模块

    3、NetWork log:主要针对网络的Network相关问题抓取

    4、aee_exp:打开aee_exp,可以看到两个文件ZZ_INTERNAL,db.00.KernelAPI.dbg

       ZZ_INTERNAL:是什么错误,发生错误的程序,报错时间

       db.00.KernelAPI.dbg:报错的各种信息及报错时机器的各种状态信息

       用GAT工具可打开db文件,打开后的部分文件显示如下:

       几种主要文件信息:

       __exp_main.txt:异常类型,调用栈等关键信息。

       _exp_detail.txt:详细异常信息

      SYS_ANDROID_LOG:android main log

      SYS_KERNEL_LOG:kernel log

      SYS_LAST_KMSG:上次重启前的kernel log

      SYS_REBOOT_REASON:重启时的硬件记录的信息。

      SYS_VERSION_INFO:kernel版本

    5、traces.txt:/data/anr/traces.txt:虚拟机信息,包括进程的,线程的跟踪信息

    二.log浅析

    初步定位:关键字查找

    常见关键字查找:"null" "error" " "E/","Fatal","NullPointerException","Build fingerprint:","exception","anr","DexOpt"等的错误信息,来定位问题

    不同的模块出现问题的关键字不一样,可收集相应的关键字进行定位查找

    log格式:

    打开一个main_log,可看到如下信息:

    抓到log后,从左到右依次是:日期,时间,进程号,线程号,log优先级,log标签

    知道这些信息对我们分析log有什么用呢?

    (1)时间信息:通过时间戳可以帮助快速定位问题,缩短分析时间

    (2)进程号、线程号:不同的进程和线程的信息可能不会一起打印,可通过进程和线程ID将相关信息放在一起分析

    (3)Log优先级:log一般划分为V,D,I,W,E

       其中V代表Verbose 冗余、提醒消息,D表示Debug 调试消息,I表示Information 普通消息,W表示Warn 警告消息,E表示Error 错误消息,可通过搜索错误信息来筛选信息

    常见异常分析:

    1.程序崩溃(提示停止运行):启动崩溃,交互崩溃等,可在events_log中搜索crash关键字初步定位问题

    2.程序闪退:stack overflow,物理内存不足等被kill,sys_log 搜索Exception 或者 died关键字定位对应包名,进而定位问题

    3.ANR问题:主要分三个方向:memoryleak(是否为低内存),CPU block(CPU使用率过高)、iowait(IO流使用过于频繁),可搜索关键字ANR

      ANR出现的情况主要有以下两种:

       A  界面操作按钮的点击等待响应时间超过5秒

       B  HandleMessage回调函数执行超过10秒,BroadcasterReciver里的onRecive()方法处理超过10秒

    4.强制关闭(FC):Fatal问题Fatal: 比较严重了,很多都很动态库和空指针有关,一般会接下来打印"Build fingerprint:"或”NullPointerException“

    下面分享一个比较容易懂的例子,大家可以学习一下log分析定位的思路(http://redmine.meizu.com/issues/496607?from_search=true

    用例场景:com.android.phone 无响应

    1.通过关键字缩小范围

      无响应问题:通过FATAL关键字可查到如下log:

    2.翻译log

    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

     at com.android.internal.telephony.dataconnection.ApnSetting.equals(ApnSetting.java:551)

    翻译以上两句可知:再调用ApnSetting的equals方法时引入了空指针的问题

    3.开发修复(有时候查看开发修复的方式也能帮助我们积累定位和分析的能力)

    修复方法:现修改为变量初始化时和之前项目保持一致做非空初始化

    修复方法:对ApnSetting中的String类型的变量做一个非空初始化

    部分修改如下:

    三.adb抓取log的常用命令

    在手机无响应无法进入工程模式的时候可用如下方法去启动mtklog

    1.adb shell am start -n com.mediatek.mtklogger/.MainActivity

    --》此命令打开MTK平台工程模式的其他log,如audio log,需要先开启root权限

    2.adb shell am broadcast -a com.mediatek.mtklogger.ADB_CMD -e cmd_name start/stop --ei cmd_target 7

    --》start表示开启,stop表示关闭;7可改为1/2/4,分别代表MobileLog/ModemLog/NetworkLog)

    3.导出log文件

    抓取完相应的log文件后就可以用:adb pull /sdcard/mtklog

    小贴士: 获取开关状态,快速查看是否打开了mobile log

    adb shell getprop debug.MB.running/adb shell getprop debug.mdlogger.Running-->值为0,表示未开始抓取相关log,值为1表示开始抓取相关log

    相关文章

      网友评论

          本文标题:浅谈log定位分析

          本文链接:https://www.haomeiwen.com/subject/bohvzqtx.html