iOS 符号表
iOS 符号表是 Xcode 项目编译后,在编译生成的文件 .app
的同级目录下生成的同名的 .dSYM
文件(其实是个文件夹)。该文件夹子目录下包含了一个函数地址映射信息的文件,该文件与应用的包名相同,这就是符号表。
注意:符号表与应用的版本没有直接关系,只要修改了应用的代码,符号表文件就会发生变化,所以并不是同一个版本所对应的符号表就是一样的。
下面以名为 Demo 的应用为例,展示符号表的位置:
Demo.app
Demo.app.dSYM // 符号表文件夹
└── Contents
├── Info.plist
└── Resources
└── DWARF
└── Demo // 符号表文件,需要上传到 Bugtags
iOS 应用在开发阶段,可以通过 Xcode 定位调试崩溃信息。上线之后的应用,则只能通过分析崩溃堆栈数据来定位问题。崩溃堆栈数据中,会指出应用出错的函数的内存地址。这些地址可以从符号表 中找到具体的文件名、函数名、行号信息,这就是符号表的作用。
上传符号表是把编译生成的符号表预先上传到 Bugtags,当应用遇到崩溃,Bugtags 后端智能分析服务就可以根据符号表自动解析崩溃堆栈的文件名、函数名、行号信息,帮助开发者定位及解决问题。
以下对比上传符号表前后,Bugtags 对崩溃堆栈数据的展示:
很显然,上传符号表后,Bugtags 后端智能分析服务就会自动将堆栈中与应用相关的代码行解析出来,开发者很容易就可以定位到问题。