开发过程中,难免会遇到Bug。
遇到Bug,怎么办?如果在测试阶段,我们还可以直接Debug;如果APP已经上架呢?还好,苹果有日志,而且真机的 日志文件能够上传的App Store,供开发者下载。但是呢,从App Store下载下来的crash文件都是二进制内存地址,这个很不方便阅读。
下面我们就来说说怎么讲crash文件符合化。
1、在桌面建立一个文件夹,比如report吧。
2、在终端中输入 find /Applications/Xcode.app -name symbolicatecrash -type f,找到"symbolicatecrash" 文件,复制、粘贴到第一步中的report文件夹下。
3、从Xcode Archive的二进制文件中找到dSYM文件夹和Products文件夹,复制、粘贴到第一步中的report文件夹下。Archive后的文件,右击、Show In Finder,就可以找到这两个文件夹。
4、把从App Store下载的crash文件(或者真机Device导出的),复制、粘贴到第一步中的report文件夹下。
上面四步就已经把我们所有要准备的东西准备好,下面开始生成符号化后的crash文件:
1、终端输入 cd /Users/username/Desktop/report,转换到我们刚创建的report目录下。
2、终端输入export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer。
3、终端输入./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash。
经过上面三步,不出意外,就会在report文件夹下生成了一个新的symbol.crash文件,打开看看是不是已经符号化了。
补充介绍一下crash类型,一般有两种,一种是EXC_BAD_ACCESS(SIGBUS或者SIGSEGV),另一种是EXC_CRASH(SIGABRT)。
第一种,一般是变量内存地址不存在(被释放了)。
第二种,一般是调用数据格式不正确或者调用的方法不存在。
我知道的就这些,欢迎大家指出更多的异常类型。
遇到的问题
1、No symbolic information found
解决办法:
每一个 xx.app 和 xx.app.dSYM 文件都有对应的 UUID,crash 文件也有自己的 UUID,只要这三个文件的 UUID 一致,才可以解析出正确的错误函数信息,否则就会出现No symbolic information found错误信息。
(1)查看 xx.app 文件的 UUID,terminal 中输入命令 :
dwarfdump --uuid xx.app/xx
(2)查看 xx.app.dSYM 文件的 UUID ,在 terminal 中输入命令:
dwarfdump --uuid xx.app.dSYM
(3)crash 文件内 Binary Images: 下面一行中 <> 内的 字符串 就是该 crash 文件的 UUID