您的位置:首页 > 移动开发 > IOS开发

iOS 崩溃日志符号化及分析

2018-02-24 16:19 375 查看
app提交被拒,原因是发生崩溃并收到了苹果给的txt格式的崩溃日志:



这一堆的符号就看懂了第一行 Thread 0 crashed:主线程崩溃。然而没啥用,不能准确定位崩溃发生的位置,主线程崩溃的原因有很多。着手把这些符号转换成能看得懂的代码吧。
第一步,下载被拒邮件中苹果提供的 .txt 崩溃日志,然后修改其后缀为 .crash。
第二布,找到被拒的版本对应的打包时的dSYM文件,你要是不知道在哪,可以先找到打包时生成的. xcarchive 文件,show in finder然后右键显示包内容,这时你应该就看到了它了,把它拷贝出来跟第一步中的.crash文件放一块:









第三步,找到XCode自带的符号化工具,symbolicatecrash 位置在/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash,把它拷贝出来,放到前面 .crash和xcarchive相同的个的文件夹下,这时候准备工作已经结束了,下面开始准备符号化。



第四步,打开终端,输入下面的指令:
开启命令行工具,进入崩溃文件夹crash中

cd /Users/自己MacPro上的名字/Desktop/崩溃文件夹crash
使用命令解析Crash文件,*号指的是具体的文件名
./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash
如果上面命令不成功,使用命令检查一下环境变量
xcode-select -print-path
返回结果:
/Applications/Xcode.app/Contents/Developer/
如果不是上面的结果,需要使用下面命令设置一下导出的环境变量,然后重复上面解析的操作。(这一步很重要)
export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer
解析完成后会生成一个新的.Crash文件,这个文件中就是崩溃详细信息。图中红色标注的部分就是我们代码崩溃的部分。



到此崩溃信息的已经很明朗了,这次崩溃是定位在项目中的一个即时通讯第三方SDK里,原因是调用他们的方法是同步方法,造成了主线程阻塞界面卡死,被审核人员判为崩溃,刚开始一直在网速较好的环境测试就是找不到哪里崩溃了,后来模拟了一下慢网速的情况才发现问题。
注意:符号化时用的.crash .xcarchive 必须是对应的,也就是crash文件必须是这个xcarchive文件打包成的ipa安装到手机上测出了崩溃后产生的,否则得不到任何结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: