全部产品

iOS 符号表管理

更新时间:2021-06-08 16:43:01

移动分析支持通过符号表对 iOS App 的闪退日志进行反向解析,以便定位 App 中的问题代码,帮助提高排查、解决线上异常问题的效率,同时提供 iOS 符号表管理功能以便导入、查询符号表并进行符号表反解测试。

什么是符号表

符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示:

  1. <起始地址> <结束地址> <函数> [<文件名:行号>]

iOS App 出现闪退时,闪退日志中的 Crash 堆栈为混淆后的二进制信息,需要通过符号表对这些二进制堆栈信息进行反向解析,将其转换为可读的函数名和行数,以便定位 App 中出现问题的代码。

导入 iOS 符号表

对闪退日志进行符号反解前,要先上传符号表。在 iOS 平台中,dSYM 文件是保存符号表的目标文件,文件名通常为 xxx.app.dSYM,建议每次构建或发布 App 的时候,备份好 dSYM 文件。

上传 iOS 符号表的步骤如下:

  1. 登录 mPaaS 控制台,选择目标应用后,从左侧导航栏进入 移动分析 > 性能分析 > iOS 符号表管理 页面。
    符号表列表

  2. 点击 导入,在导入符号表弹窗中,输入符号表信息,并上传相应的符号表。

    • 版本:App 版本号。
    • Module Name:iOS App 二进制文件名称,存储在符号表文件里面用来标识出对应的 App 二进制文件,以方便用户匹配 App 二进制文件和 App 的符号表文件。

      此处填写 App 主 module 的 moduleName,例如打出的包是 Produce.app, 那么 moduleName 为 Produce

    • UUID:通用唯一识别码(Universally Unique Identifier,简称 UUID),是机器生成的唯一标识符。
      iOS 应用每次编译时都会生成一个 UUID,为保证反解成功,堆栈的 UUID 和应用的符号表文件中的 UUID 必须保持一致(也就是来自同一次编译)。还原 Crash 堆栈信息时,仅当导入的符号表文件的 UUID 与闪退日志中的 UUID 一致时,才能准确地对堆栈进行解析还原。

      此处填写 App 主 module 的 UUID,如果有多个,选择其中一个填写即可。例如有 armv7、arm64 两种架构,则会有两个 UUID,任选一个填写即可。格式上,UUID 字符串需去掉“-”,并且全部小写,例如:b7583434dc5e377bb4d8e7b69bf4c1fb。

    • URL 上传:输入符号表 URL。如果指定 URL 下没有符号表文件,会返回报错信息。
  3. 点击 导入,导入符号表。
  4. 在 iOS 符号表管理页面中查看符号表的导入状态。如果符号表状态为 Done,表示导入成功;如果为 Failed,则表示导入失败,请根据错误提示重新导入符号表文件。

导入的符号表都将展示在符号表管理页面,可根据 App 版本进行查询。

反解测试

反解测试用于验证导入的符号表文件是否有效。

反解测试的步骤如下:

  1. 在 iOS 符号表列表中,选择导入成功的目标符号表,点击操作列下的 反解测试
  2. 原始日志文本 栏中输入需要反解的闪退日志内容后,点击 反解日志日志反解结果 栏将显示反解后的日志文本,如果反解失败,会提供失败原因,例如“UUID 不匹配”等。