• 移动端测试——日志分析


    Android App 常见异常
    CRASH
    在应用程序代码中出现了未捕获异常,导致程序异常退出,具体表现为闪退或App停止运行。
    发生crash的原因:
        一般是因为业务代码导致了异常,比如空指针、索引越界、内存溢出等。
    ANR(Application Not Responding)
    应用程序无响应,用户的输入操作在5s之内没有得到相应,此时Android系统就会判定出现了ANR,会显示一个ANR对话框,用户可以选择继续等待或者关闭应用程序。
    发生ANR的原因:
        Android的机制是通过主线程(UI线程)创建UI、更新UI状态及处理用户的事件操作。如果在主线程中做了其他的一些耗时操作,比如:数据库读取、文件读取、网络操作等就会主线程阻塞,导致无法及时相应用户的操作。
    logcat日志
    logcat是Android中用来查看日志的命令行工具,Android会在运行的时候将系统及应用程序的日志保存到 logcat 中。
    adb logcat 命令格式:
    adb logcat <参数> ... <过滤器> ...
    logcat日志由以下部分组成:
    1. 写下日志时的日期时间
    2. PID(进程ID)
    3. TID(线程ID)
    4. 优先级,在Android中,日志的优先级从低到高分以下几种:
                V —Verbose (啰嗦,最低级别,开发调试中的一些详细信息,仅在开发中使用,不可在     发布产品中输出)
                D —Devug (调试,用于调试的信息,可以在发布产品中关闭,比较常见)
                I —Info (信息,一般提示性的消息)
                W —Warning (警告)
                E —Error (错误,已经出现可影响运行的错误,比如应用crash时输出的日志)
                F —Fatal (严重的错误,已经出现可影响运行的错误,比如应用crash时输出的日志)
                S —Slient
            5.  标签(tag),日志发起者
            6.  正文,日志的主体内容
    logcat 缓冲区
    logcat 日志是保存在缓冲区中的,缓冲区可以通过logcat命令来查看和使用。
    因为Android logcat日志是实时不断打印的,所以需要用到环形缓冲区。在通常情况下,写满时最旧的日志会被删除以给新输出的日志留内存空间。
    在开发者选项,有个选项就做“日志记录器缓冲区大小”,默认是256K。
    Android log 输出量非常多,因此Android会把不同类型的log输出到不同的缓冲区中:    
            1. Radio:通讯系统的log,比如:蓝牙、WiFi、3G/4G等
            2. System:系统组件的log,比如:系统服务
            3. Event:事件的log,不如:触摸事件、按键事件
            4. Main:Java层的log,测试App需要重点关注的模块
    如:想输出通信系统的log:
    adb logcat -b radio
    默认log输出(不指定缓冲区的情况下)是输出Main和System缓冲区的log。
    logcat 参数
    参数
    描述
    -b
    指定查看的日志缓冲区,比如event和radio。默认值是main
    -c
    清除缓冲区中的全部日志并退出(清除完后可以使用-g查看缓冲区)
    -g
    打印日志缓冲区的大小并退出
    -d
    将缓冲区的log输出带终端然后退出
    -s
    设置过滤器
    logcat 过滤器
    为了减少不想要日志的输出,可以建立一个过滤器
    过滤语法:
    tag:priority
    比如:
    # 仅输出tag为“ActivityManager”且优先级大于等于“info”
    adb logcat -s ActivityManager:I
    # 显示所有优先级大于等于“warning”的日志
    adb logcat -s *:W
    traces 日志
    Android系统每次发生ANR后,都会在 /data/anr/ 目录下面输出一个traces.txt 文件,这个文件记录了发生问题进程的虚拟机相关信息和线程的堆栈信息,通过这个文件我们就能分析出当前线程正在做什么操作,继而可以分析出ANR的原因。
    获取traces.txt 文件
    adb pull /data/anr/traces.txt <本地电脑路径>
    需要注意:在Android 10 以下的系统会使用上述命苦可以导出traces文件,但是在Android 10及以上版本traces文件做了优化,会根据时间戳来分别生成单独的traces文件(可以避免traces文件覆盖问题),而且通过 adb pull 导出 traces文件时会提示 Permission denied 
    解决方案:获取 bugreport 日志
    bugreport 日志
    bugreport文件中记录了系统运行过程中的各种log信息,bugreport中包含了设备日志、堆栈轨迹和其他诊断信息,可以帮助开发人员查找和修复应用中的错误。
    获取bugreport 日志
    第一种:
    1. 在开发者选项中,选择生成 bug report
    2.  选择bug report 类型,过一会就会在通知栏收到一个报告准备好的通知
    第二种:
    adb bugreport <本地电脑目录>
    bugreport 日志分析
    bugreport 往往会包含大量的文件内容,可以利用工具 ChkBugReport 。
    使用步骤:
    1.  下载ChkBugReport jar 包
    1. 解压bugreport-XXX.zip压缩包,得到 bugreport-XXX.txt文件,使用命令
            java -jar chkbugreport-0.5-215.jar "bugreport-XXX.txt"
    IOS端日志分析
    ios设备上的应用崩溃之后,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上。
    • 应用违反操作系统规则(启动、退出超时,低内存终止)
    • 应用的业务代码导致的BUG
    常见的日志获取方式有以下几种:
    1. 本机系统设置→隐私→分析与改进里找到当时的崩溃日志
    2. 使用第三方软件,比如 iTools、爱思助手等,可以导出 Crash 日志
    3. 使用Xcode,选择顶部菜单栏Windows,选中 Devices and Simulators 打开
    移动端日志系统
    日志系统,是移动端定位排查线上问题非常有效的一个工具,它还可以帮助我们统计用户行为、发现代码运行问题等。
    第三方商业日志系统
            1. 腾讯Bugly:https://bugly.qq.com
            2. 友盟:https://developer.umeng.com/docs/119267/detail/119477
            3. 听云:https://www.tingyun.com/
    开源日志框架
            1. 美团的Logan:https://github.com/Meituan-Dianping/Logan
            2. 微信的xLog:https://github.com/Tencent/mars
  • 相关阅读:
    希望所有计算机专业学生都去这些网站刷题
    Bean 的作用域和生命周期
    数字化转型系列主题:数据中台知识体系
    科教导刊杂志科教导刊杂志社科教导刊编辑部2022年第27期目录
    手刻 Deep Learning -第壹章-PyTorch入门教学-基础概念与再探线性回归
    elasticsearch-spark的用法
    一个app的流程分析
    JSP+实验室设备管理 毕业设计-附源码191409
    【Eclipse Maven Tycho】如何通过maven执行eclipse application
    教育培训机构寒暑假班学校公众号小程序
  • 原文地址:https://blog.csdn.net/weixin_45243288/article/details/127654918