iOS dSYM奔溃文件解析

前言

iOS开发中,通常会遇到很多各种各样的线上奔溃,这无疑给用户带来了极其不好的体验。在平时开发过程中,我们可以直接通过断点调试,或直接查看奔溃的地方找到原因,但是一般情况下,线上的奔溃由于都是一些地址和偏移量组成的未符号化过的奔溃文件(即crash文件),我们都无法通过奔溃信息直接定位到具体原因!因此,将未符号化的crash文件通过dSYM解析就非常重要了。

本文主要简单地介绍如何将奔溃文件符号化,变成清晰可见的奔溃文件,以便快速定位奔溃原因。

解析步骤

  • 在任意目录,这里以桌面为例,创建文件夹CrashParser(名字随意)
cd ~/Desktop && mkdir CrashParser && cd CrashParser
  • xxx.crashxxx.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.crashdSYM文件夹为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"

附录

  • 个人博客
  • 个人

你可能感兴趣的:(iOS dSYM奔溃文件解析)