最近触发了一些线上崩溃,没有其他参考路径,只有线上crash文件,由于现在公司项目没有接入第三方分析文件,所以还是要自己手动看一下,之前很少直接接触这类文件,所以还是记录一下
一、预先准备
1、在桌面建立一个crash文件夹,存放相关文件;
2、将.crash文件,.app.dYSM文件,symbolicatecrash放入该文件夹;
symbolicatecrash获取方法
打开终端,输入
find /Applications/Xcode.app/ -name symbolicatecrash -type f
获取到相关地址,最后一个就可以获取到symbolicatecrash路径
/Applications/Xcode.app//Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
把这个文件复制到在桌面建立的crash文件中
cp /Applications/Xcode.app//Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash /Users/本机名/Desktop/crash/
.app.dYSM文件从打包的XXApp.xcarchive文件中获取;
准备好三个文件后,运行命令行
cd /Users//本机名/Desktop/crash/
运行该语句
./symbolicatecrash ./.crash ./.app.dSYM > symbol.crash
我本次出现了Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.错误
使用下列命令行修改该错误
xcode-select -print-path
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer/
修改完成后,再次运行
./symbolicatecrash ./.crash ./.app.dSYM > symbol.crash
最终在crash文件夹中会获得一个新的symbol.crash文件,崩溃信息即可查看;
二、定位崩溃问题
从崩溃信息中,可以查找到崩溃地点在
[view.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)];
原来用的方法是
view.layer.sublayers = nil;
但是这个问题只能定位到这里说图层移除有问题,理论上removeFromSuperlayer是可用的,具体问题出在哪里,还是要进一步确定;
查了一些资料,但是还需要本身去做验证,盲目说这个有问题也不太好;
参考资料:
Xcode自带工具symbolicatecrash解析iOS Crash文件
iOS分析Crash文件
删除所有CALayer的子图层
关于sublayer Remove的时候的闪退问题
ios - 在调用removeFromSuperlayer之后的sublayers中