iOS平台中,dSYM文件是指具有调试信息的目标文件,文件名通常为:xxx.app.dSYM。如下图所示:
为了方便找回Crash对应的dSYM文件和还原堆栈,建议每次构建或者发布APP版本的时候, 备份好dSYM文件
Bugly还原Crash堆栈时,需要根据UUID来匹配符号表文件,因此只有上传的符号表文件的UUID与Crash对应APP的UUID一致时,才能准确地对堆栈进行还原。
通过命令查看UUID
通过符号表文件查看UUID
符号表文件的UUID与dSYM文件的UUID是一致的,因此可以通过符号表工具生成的符号表文件来查看dSYM文件的UUID:
生成符号表文件(.zip) --->解压符号表文件(.symbol) --->使用文本编辑器打开符号表文件
其中符号表文件的“UUID”信息即Debug SO文件的UUID,亦是符号表文件的UUID,如果文件较大,建议使用“Sublime Text”等文本编辑器来打开符号表文件。
当我们软件 release 模式打包或上线后,不会像我们在 Xcode 中那样直观的看到用崩溃的错误,这个时候我们就需要分析 crash report 文件了,iOS 设备中会有日志文件保存我们每个应用出错的函数内存地址,通过 Xcode 的 Organizer 可以将 iOS 设备中的 DeviceLog 导出成 crash 文件,这个时候我们就可以通过出错的函数地址去查询 dSYM 文件中程序对应的函数名和文件名。大前提是我们需要有软件版本对应的 dSYM 文件,这也是为什么我们很有必要保存每个发布版本的 Archives 文件了。
符号集是我们对ipa文件进行打包之后,和.app文件同级的后缀名为.dSYM的文件,这个文件必须使用Xcode进行打包才有。
每一个.dSYM文件都有一个UUID,和.app文件中的UUID对应,代表着是一个应用。而.dSYM文件中每一条崩溃信息也有一个单独的UUID,用来和程序的UUID进行校对。
我们如果不使用.dSYM文件获取到的崩溃信息都是不准确的。
符号集中存储着文件名、方法名、行号的信息,是和可执行文件的16进制函数地址对应的,通过分析崩溃的.Crash文件可以准确知道具体的崩溃信息。
我们每次Archive一个包之后,都会随之生成一个dSYM文件。每次发布一个版本,我们都需要备份这个文件,以方便以后的调试。进行崩溃信息符号化的时候,必须使用当前应用打包的电脑所生成的dSYM文件,其他电脑生成的文件可能会导致分析不准确的问题。
当程序崩溃的时候,我们可以获得到崩溃的错误堆栈,但是这个错误堆栈都是0x开头的16进制地址,需要我们使用Xcode自带的symbolicatecrash工具来将.Crash和.dSYM文件进行符号化,就可以得到详细崩溃的信息。
https://www.jianshu.com/p/0b6f5148dab8
http://foggry.com/blog/2015/07/27/ru-he-shou-dong-jie-xi-crashlog/
在 iOS 开发中,通常会遇到很多各种各样的线上奔溃,这无疑给用户带来了极其不好的体验。在平时开发过程中,我们可以直接通过断点调试,或直接查看奔溃的地方找到原因,但是一般情况下,线上的奔溃由于都是一些地址和偏移量组成的未符号化过的奔溃文件(即 crash 文件),我们都无法通过奔溃信息直接定位到具体原因!因此,将未符号化的 crash 文件通过 dSYM 解析就非常重要了。
本文主要简单地介绍如何将奔溃文件符号化,变成清晰可见的奔溃文件,以便快速定位奔溃原因。
其中,将 xxx.crash xxx.app.dSYM 中的 xxx 替换成对应的完整奔溃文件名和 dSYM 文件名,其它的都可以不用修改,直接执行即可。
例如,下面的奔溃文件在解析前为 UnparsedSymbol.crash , dSYM 文件夹为 Demo.app.dSYM
在执行之后,变成如下
其中 ParsedSymbol.crash 就是最终解析后的符号化文件, symbolicatecrash 是我们用于执行解析的 可执行文件 ,这个 可执行文件 来源于 Xcode 。
通常情况下,可执行文件 symbolicatecrash 的路径 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash 是不变的,如果你不确定这个路径是否正确,通过以下命令可以查看
如果出现错误 Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69. ,执行如下命令
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)