前言
在iOS
开发中,通常会遇到很多各种各样的线上奔溃,这无疑给用户带来了极其不好的体验。在平时开发过程中,我们可以直接通过断点调试,或直接查看奔溃的地方找到原因,但是一般情况下,线上的奔溃由于都是一些地址和偏移量组成的未符号化过的奔溃文件(即crash
文件),我们都无法通过奔溃信息直接定位到具体原因!因此,将未符号化的crash
文件通过dSYM
解析就非常重要了。
本文主要简单地介绍如何将奔溃文件符号化,变成清晰可见的奔溃文件,以便快速定位奔溃原因。
解析步骤
- 在任意目录,这里以桌面为例,创建文件夹
CrashParser
(名字随意)
cd ~/Desktop && mkdir CrashParser && cd CrashParser
将
xxx.crash
、xxx.app.dSYM
文件拖到CrashParser
文件夹中解析并查看符号化(解析)后的奔溃信息
cp /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash . && export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer" && ./symbolicatecrash xxx.crash xxx.app.dSYM > ParsedSymbol.crash && open ParsedSymbol.crash
其中,将xxx.crash xxx.app.dSYM
中的xxx
替换成对应的完整奔溃文件名和dSYM
文件名,其它的都可以不用修改,直接执行即可。
例如,下面的奔溃文件在解析前为UnparsedSymbol.crash
,dSYM
文件夹为Demo.app.dSYM
➜ CrashParser ls
Demo.app.dSYM UnparsedSymbol.crash
➜ CrashParser cp /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash . && export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer" && ./symbolicatecrash UnparsedSymbol.crash Demo.app.dSYM > ParsedSymbol.crash && open ParsedSymbol.crash
在执行之后,变成如下
➜ CrashParser ls
Demo.app.dSYM ParsedSymbol.crash UnparsedSymbol.crash symbolicatecrash
其中ParsedSymbol.crash
就是最终解析后的符号化文件,symbolicatecrash
是我们用于执行解析的可执行文件,这个可执行文件来源于Xcode
。
注意点
通常情况下,可执行文件symbolicatecrash
的路径/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
是不变的,如果你不确定这个路径是否正确,通过以下命令可以查看
find /Applications/Xcode.app -name symbolicatecrash -type f
如果出现错误Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
,执行如下命令
export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"