iOS 符号表

介绍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界面

    image

  • Finder界面

    image

2. XCode编译后无dSYM文件

一般情况下,XCode Release编译默认会生成dSYM文件,而Debug编译默认不会生成,对应的Xcode配置如下:

Generate Debug Symbols -> Yes
Debug Information Format -> DWARF with dSYM File

image

3. 找回已发布App的dSYM文件

1、打开Xcode顶部菜单栏->Window->Organizer窗口;
2、找到发布的归档包,选择“Show in Finder”;
3、右键选择定位到的归档文件,选择“显示包内容”;
4、选择dSYMs目录,即可看到App对应的dSYM文件。

image

image

image

4. Crash与dSYM的UUID匹配

崩溃分析在还原Crash堆栈时,需要根据UUID来匹配符号表文件,因此需保证上传的符号表文件的UUID与Crash对应APP的UUID一致。

重要

崩溃分析Crash的UUID和符号表文件的UUID可能因为字母的大小写或者连接符“-”而产生差异,不影响其内容一致性。

  • Crash UUID

    image

  • 符号表文件UUID

    通过以下命令查看UUID:

    xcrun dwarfdump --uuid <dSYM文件>

    image

三、 如何上传符号表

详见 网页上传符号表

四、 FAQ

详见 符号表 FAQ