移动分析模块提供了闪退(Crash)日志上传功能,帮助开发者及时监控和捕获客户端产生的各种闪退问题。对于 Android 应用,闪退日志在上传时已经自动对崩溃点的调用栈进行了符号化,可以直接定位到闪退的代码。而 iOS 平台则需要在控制台上传符号表。
在解决该问题前,我们需要先了解什么是符号表以及为什么需要符号表。
什么是符号表
符号表是内存地址与代码中的函数名、行号之间的映射关系表。
为什么需要符号表
iOS App 上传的闪退日志中包括的调用栈信息都是通过内存地址记录的,开发者无法直观的看到闪退发生时对应的代码调用栈信息。为了能便捷地定位 Crash 发生的代码位置,mPaaS 服务端需要使用符号表对 iOS Crash 日志的程序堆栈进行解析和还原。例如:
解析前:
18 NebulaTest 0x00000001030f6b7c 0x104ad4000 + 9282380 19 NebulaTest 0x00000001030f6ed4 0x104ad4000 + 9283236 20 NebulaTest 0x00000001030f6d0c 0x104ad4000 + 9282780 21 NebulaTest 0x00000001030f6ed4 0x104ad4000 + 9283236 22 NebulaTest 0x00000001030f6d0c 0x104ad4000 + 9282780
解析后:
18 NebulaTest 0x00000001030f6b7c -[DTJsonEncoder encodeObject:ofClass:recusive:] + 424 19 NebulaTest 0x00000001030f6ed4 -[DTJsonEncoder encodeObject:] + 280 20 NebulaTest 0x00000001030f6d0c -[DTJsonEncoder encodeObject:ofClass:recusive:] + 824 21 NebulaTest 0x00000001030f6ed4 -[DTJsonEncoder encodeObject:] + 280 22 NebulaTest 0x00000001030f6d0c -[DTJsonEncoder encodeObject:ofClass:recusive:] + 824
iOS 项目获取 dSYM 符号表文件
XCode 在 Release 编译模式下默认会生成 dSYM 文件。在 Debug 编译模式下需要进行额外配置:
在 iOS 工程中,选择 Build Settings > Code Generation > Generate Debug Symbols > Yes。
选择 Build Settings > Build Option > Debug Information Format > DWARF with dSYM File。
编译成功后,打开 App 所在对文件夹:
此时应该可以看到在产生在同一目录下的 dSYM 符号表文件:
通过 mPaaS 控制台上传符号表
在苹果商店发布应用后,开发者需要在 mPaaS 控制台上正确添加对应版本号的发布任务。添加完发布任务后,上传对应的符号表文件。
如果一切配置正常,此后该版本产生的闪退日志,在 mPaaS 控制台均能看到解析后的闪退日志。
如果已经 iOS 项目已经上传符合表,依然不能解析 iOS App 闪退日志,请务必本地确认该符号表能否手动解析闪退日志。
如果闪退日志解析结果不全或不正确,请确认该符号表和实际 App 版本之间是否完全匹配。开发者一定要管理和备份好发布版本的符号表 dSYM 文件,避免符号表丢失。