介绍iOS符号表的基础概念,以及如何找到符号表并上传。
一、什么是符号表
1. 简介
符号表(Symbol Table)是编译器和解释器中用来存储源代码中符号信息的数据结构,符号表元素如下所示:
<起始地址> <结束地址> <函数> [<文件名:行号>]
2. 作用
为了能准确定位Crash发生的代码位置,崩溃分析使用符号表对Crash堆栈进行解析还原。例如下面的原始堆栈及其还原之后:
原始堆栈
crash_ios_demo 0x0000000102a95d45 0x102a94000 + 7493
还原堆栈
crash_ios_demo 0x100879d45 -[ViewController testCrash:] ViewController.m:29 (in crash_ios_demo)
3. iOS符号表
iOS平台中,dSYM文件是保存符号表的目标文件,文件名通常为xxx.app.dSYM
,建议每次构建或发布App的时候,备份好dSYM 文件。
重要
在上传符号表的时候,需要将dSYM文件压缩成一个zip文件上传。
二、如何找到符号表
1. XCode查找
一般情况下,XCode项目编译完dSYM文件跟app文件在同一个目录下,按以下步骤查找dSYM文件:
1、进入XCode,打开App工程;
2、在项目导航栏找到“Product”项;
3、鼠标右键点击编译生成的“xxx.app”,点击“Show in Finder”
4、同目录的xxx.app.dSYM即为符号表文件
Xcode界面
Finder界面
2. XCode编译后无dSYM文件
一般情况下,XCode Release编译默认会生成dSYM文件,而Debug编译默认不会生成,对应的Xcode配置如下:
Generate Debug Symbols -> Yes
Debug Information Format -> DWARF with dSYM File
3. 找回已发布App的dSYM文件
1、打开Xcode顶部菜单栏->Window->Organizer窗口;
2、找到发布的归档包,选择“Show in Finder”;
3、右键选择定位到的归档文件,选择“显示包内容”;
4、选择dSYMs目录,即可看到App对应的dSYM文件。
4. Crash与dSYM的UUID匹配
崩溃分析在还原Crash堆栈时,需要根据UUID来匹配符号表文件,因此需保证上传的符号表文件的UUID与Crash对应APP的UUID一致。
重要
崩溃分析Crash的UUID和符号表文件的UUID可能因为字母的大小写或者连接符“-”而产生差异,不影响其内容一致性。
Crash UUID
符号表文件UUID
通过以下命令查看UUID:
xcrun dwarfdump --uuid <dSYM文件>
三、 如何上传符号表
详见 网页上传符号表。
四、 FAQ
详见 符号表 FAQ。
文档内容是否对您有帮助?