博客> iOS .dSYM符号表文件
iOS .dSYM符号表文件
2019-11-13 21:05 评论:0 阅读:711 lvhahaha
.dSYM符号文件

1. 符号表是什么?

符号表就是指在Xcode项目编译后,在编译生成的二进制文件.app的同级目录下生成的同名的.dSYM文件。

.dSYM文件其实是一个目录,在子目录中包含了一个16进制的保存函数地址映射信息的中转文件,所有Debug的symbols都在这个文件中(包括文件名、函数名、行号等),所以也称之为调试符号信息文件。

一般地,Xcode项目每次编译后,都会生成一个新的.dSYM文件。因此,App的每一个发布版本,都需要备份一个对应的.dSYM文件,以便后续调试定位问题。

注意: 项目每一次编译后,.app和.dSYM成对出现,并且二者有相同的UUID值,以标识是同一次编译的产物。 UUID值可以使用dwarfdump —uuid来检查:

$ dwarfdump --uuid XX.app.dSYM $ dwarfdump --uuid XX.app/XX

2. 符号表有什么用?

在Xcode开发调试App时,一旦遇到崩溃问题,开发者可以直接使用Xcode的调试器定位分析。

但如果App发布上线,开发者不可能进行调试,只能通过分析系统记录的崩溃日志来定位问题,在这份崩溃日志文件中,会指出App出错的函数内存地址,而这些函数地址是可以在.dSYM文件中找到具体的文件名、函数名和行号信息的,这正是符号表的重要作用所在。

实际上,使用Xcode的Organizer查看崩溃日志时,也自动根据本地存储的.dSYM文件进行了符号化的操作。 并且,崩溃日志也有UUID信息,这个UUID和对应的.dSYM文件是一致的,即只有当三者的UUID一致时,才可以正确的把函数地址符号化。

3.符号表的生成 a、使用xcodebuild编译打包debug

-> 进入XCode;

-> 打开工程(已编译过);

-> 在左栏找到“Product”项;

-> 鼠标右键点击编译生成的“xxx.app”;

-> 点击“Show in Finder”;

 finder.png

 finder_dsym.png

XCode编译后没有生成dSYM文件? XCode Release编译默认会生成dSYM文件,而Debug编译默认不会生成,对应的Xcode配置如下:

XCode -> Build Settings -> Code Generation -> Generate Debug Symbols -> Yes

XCode -> Build Settings -> Build Option -> Debug Information Format -> DWARF with dSYM File

 xcode.png

然后再编译一下就出现了。

b.使用Xcode的Archive导出

如果开发者使用Xcode的Archive导出功能打包,可以切换到Organizer的Projects视图,查看对应项目的Derived Data路径,查看包内容,然后在其中可以找到当前导出过程产生的.app和.app.dSYM文件

c.自动配置:XCode + sh脚本

自动配置请首先下载和解压自动配置符号表工具包,然后选择上传方式并配置Xcode的编译执行脚本。

上传方式 使用脚本自动配置支持两种上传方式:

方式一:直接上传dSYM文件(默认方式 )

方式二:提取dSYM文件的符号表文件并上传

其中,使用方式二需要额外操作以下几步:

下载符号表提取工具依赖的Java运行环境(JRE或JDK版本需要>=1.6)

把工具包buglySymbolIOS.jar保存在用户主目录(Home)的bin目录下(没有bin文件夹,请自行创建):

配置Xcode编译执行脚本 在Xcode工程对应Target的Build Phases中新增Run Scrpit Phase

具体请看这里

收藏
2
sina weixin mail 回到顶部