iOS崩溃日志分析入门

2021-03-04  本文已影响0人  落叶情思

怎么获取崩溃日志

获取日志的N+1中方式

常见crash格式

通常来说,iOS崩溃之后从系统导出的崩溃文件一般是以ips为后缀的,其实就是正常的文字格式,后缀是可以随意改的

Crash的基本信息

image
Incident Identifier: crashlog 文件唯一标识符,类似于苹果设备的 udid。
Hardware Model: 标识硬件设备类型,如果有许多崩溃日志该字段相同,那么有可能是某种特定机型的问题
Process: 发生崩溃的进程名称和对应的 processID。
Path: 发生崩溃应用的文件路径。
Indentify、 version、 Code Type: 发生崩溃应用的 bundleID、版本、编码类型。
Role:发生崩溃时应用是在前台还是后台,这是一个复现和分析 crash 的重要信息。 有些问题是在应用退到后台时才会发生, 比如百度导航压力测试时,如果该字段为
backforeground:可以猜想是否是长时间后台导航导致 crash。
Date/Time:发生崩溃的具体时间。
Launch/Time: 应用开始运行的时间。如果想要知道应用在运行多久后发生了崩溃, 可以用 Launch/Time- Date/Time
OS Version: 操作系统版本,与 Hardware Model 字段类似,如果有许多崩溃日志该字段相同,那么有可能是某种系统的问题。

异常信息

image
异常信息包括异常类型(exception type)、异常子类型(exception subtype)、异常编码(exception code)、 异常描述(exception note)异常线程号(Triggered by Thread)和其它异常信息,crashlog 文件会给出以上几种或者全部异常字段。

异常类型对应的字段是 Exception type, 一般包含两个元素: Mach 异常+Unix 信号(括号中的内容), Mach 是 XNC 内核核心, Mach 异常是内核级异常, Mach 异常在 host 层被ux_exception 转换为响应的 Unix 信号,并通过 thread signal 将信号投递至出错的线程。

Crashlog 中常见的 Mach 异常有以下几种:

Crashlog 中常见的 Unix 信号有以下几种:

Unix 信号还有很多,此处仅列举 Crashlog 文件中常见的信号类型。

  1. 异常编码
    异常类型对应的字段是 exception code,通过异常编码可以大致确认 crash 引发的原因,常见的异常编码有一下几种。

线程回溯信息

异常信息后面显示的是线程回溯信息,记录了发生崩溃时每个线程的调用堆栈,是crashlog 文件的主体,后面会重点介绍。


image

线程状态

该部分保存发生 crash 时寄存器中的值。


image

重点关注


二进制映像

该部分列出了发生 crash 之前已经成功加载的二进制文件。


image

其它类型 crashlog 文件

除了常见的 crashlog 文件外,还有其它不同结构的 crashlog 文件,比如低内存、 CPUUsage 等。低内存 crashlog 的 process 名称和 type 一般为 unknown, 文件结构中没有线程回溯信息, 如下所示。

崩溃日志解析(静请期待下期讲解)

参考资料

上一篇下一篇

猜你喜欢

热点阅读