iOS 测试 iPhone crash 管理

dengwei729 · 2017年09月20日 · 最后由 恒温 回复于 2017年09月20日 · 1936 次阅读

背景

  • 每日线上会收集回来很多的崩溃信息,但我们往往关心的是有多少类,及该类崩溃信息对应的系统、硬件分布、崩溃 pv、uv 等情况
  • 版本间崩溃对比,top20 问题是否有变动,历史版本崩溃是否被修复,线上版本是否有新增崩溃

分析崩溃

第一步、符号化崩溃日志

第二步、获取单个崩溃日志的各项信息

  • 获取崩溃线程,然后对线程信息做处理得出崩溃唯一标识

    # 这块暂时不做容错,默认crash均是完整
    lastExceptionBacktrace = re.search(r"Last Exception Backtrace:(.+?)Thread ", c_content, re.S)
    if lastExceptionBacktrace:
        crash_info["crash_thread_detial"] = lastExceptionBacktrace.group(1).strip()
    else:
        try:
            crash_info["crash_thread_detial"] = re.search(r'Crashed:(.+?)Thread ',c_content ,re.S).group(1).strip()
        except:
            print "no Crashed word:",crashPath
            return None
    
  • 获取系统版本
    crash_info["os_version"] = re.search(r"OS Version:(.+)", c_content).group(1).strip()

  • 获取设备硬件信息

    • crash_info["hardware"] = re.search(r"Hardware Model:(.+)", c_content).group(1).strip()
    • 一般需要做一个映射关系
INTERNAL_NAME = {
    # iPhone 映射关系
    "iPhone1,1": "iPhone",
    "iPhone1,2": "iPhone 3G",
    "iPhone2,1": "iPhone 3GS",
    "iPhone3,1": "iPhone 4",
    "iPhone3,2": "iPhone 4",
    "iPhone3,3": "iPhone 4",
    "iPhone4,1": "iPhone 4S",
    "iPhone5,1": "iPhone 5",
    "iPhone5,2": "iPhone 5",
    "iPhone5,3": "iPhone 5c",
    "iPhone5,4": "iPhone 5c",
    "iPhone6,1": "iPhone 5s",
    "iPhone6,2": "iPhone 5s",
    "iPhone7,2": "iPhone 6",
    "iPhone7,1": "iPhone 6 Plus", 
    "iPhone8,1": "iPhone 6s", 
    "iPhone8,2": "iPhone 6s Plus", 
    # iPad 映射关系
    "iPad1,1": "iPad",
    "iPad2,1": "iPad 2",
    "iPad2,2": "iPad 2",
    "iPad2,3": "iPad 2",
    "iPad2,4": "iPad 2",
    "iPad3,1": "iPad 3",
    "iPad3,2": "iPad 3",
    "iPad3,3": "iPad 3",
    "iPad3,4": "iPad 4",
    "iPad3,5": "iPad 4",
    "iPad3,6": "iPad 4",
    "iPad4,1": "iPad Air",
    "iPad4,2": "iPad Air",
    "iPad4,3": "iPad Air",
    "iPad5,3": "iPad Air 2",
    "iPad5,4": "iPad Air 2",
    "iPad6,7": "iPad Pro",
    "iPad6,8": "iPad Pro"
}
  • 获取 app 版本
crash_info["app_version"] = re.search(r"Version:(.+)", c_content).group(1).strip()

第三步、根据上述获取到的信息做聚类即可

共收到 1 条回复 时间 点赞

这个有意思

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册