在解决iOS应用线上崩溃时,我们通常要分析崩溃日志来定位原因。线上崩溃日志一般是未符号或部分符号化的日志,是一堆十六进制的内存地址集合,可读性比较差,这对解决问题几乎没有帮助。所以,我们首先需要先对崩溃日志进行符号化——根据App出错的函数内存地址,在.dSYM文件中找到具体的文件名、函数名和行号信息。有了上述信息,我们就可以定位分析具体的崩溃原因了。
如果存在大量的崩溃日志,光符号化崩溃日志是远远不够的,我们不可能一条一条去分析大量崩溃日志,这时候就需要对符号化的崩溃日志进行聚类了。通过聚类,将相同或相近的一类崩溃归类在一起,进行统计分析,这在实际问题解决中具有重要的意义。本文将介绍基于NLP的崩溃日志聚类的实现。
本文提纲如下:
1. 崩溃符号化
1.1 崩溃日志结构
线上崩溃日志结构大致如下图所示。我们需要关心的信息主要是标注为红色的部分,具体说明详见表格的描述。

日志段 | 字段 | 意义 |
头部信息 | Identifier | 应用的bundle ID |
Version | 应用版本号 | |
Code Type | 设备CPU类型,例如ARM-64 | |
Date/Time | 崩溃时间 |