iOS 符号表

iOS 符号表是 Xcode 项目编译后,在编译生成的文件 .app 的同级目录下生成的同名的 .dSYM 文件(其实是个文件夹)。该文件夹子目录下包含了一个函数地址映射信息的文件,该文件与应用的包名相同,这就是符号表。

注意:符号表与应用的版本没有直接关系,只要修改了应用的代码,符号表文件就会发生变化,所以并不是同一个版本所对应的符号表就是一样的。

下面以名为 Demo 的应用为例,展示符号表的位置:

Demo.app
Demo.app.dSYM         // 符号表文件夹
└── Contents
    ├── Info.plist
    └── Resources
        └── DWARF
            └── Demo  // 符号表文件,需要上传到 Bugtags

iOS 应用在开发阶段,可以通过 Xcode 定位调试崩溃信息。上线之后的应用,则只能通过分析崩溃堆栈数据来定位问题。崩溃堆栈数据中,会指出应用出错的函数的内存地址。这些地址可以从符号表 中找到具体的文件名、函数名、行号信息,这就是符号表的作用。

上传符号表是把编译生成的符号表预先上传到 Bugtags,当应用遇到崩溃,Bugtags 后端智能分析服务就可以根据符号表自动解析崩溃堆栈的文件名、函数名、行号信息,帮助开发者定位及解决问题。

以下对比上传符号表前后,Bugtags 对崩溃堆栈数据的展示:

未上传符号表的堆栈数据

上传符号表后的堆栈数据

很显然,上传符号表后,Bugtags 后端智能分析服务就会自动将堆栈中与应用相关的代码行解析出来,开发者很容易就可以定位到问题。

评论