解析.crash
上一篇博文中介绍了如何获取.crash来获取程序崩溃信息,其中有些.crash有十分明确的错误信息,提示哪个控制器的哪个方法的哪一行出错。有些.crash却是如同天书的十六进制地址,如果不能看懂这些信息,要它何用。接下来就说说如何将看不懂的.crash解析为看得懂的.crash
解析.crash要的三个文件
- .crash文件
- .dSYM文件
- symbolicatecrash
收集齐上面三个文件,说出咒语,就可以召唤出解析后的.crash。在桌面建个文件夹,将之前获取到的.crash放到之中备用。
.dSYM
dSYM文件是iOS编译后保留16进制函数地址映射信息的文件
如何生成.dSYM
配置Xcode TARGETS->Build Settings ->Build Options ->Debug information Format 的值为DWARF with dSYM File
打包软件后会自动生成
那么生成的.dSYM文件在哪?
点击Xcode->Preferences 弹出的框选最后一个Locations,
在Locations中能设置Derived Data和Archive的路径,
如果没修改过默认路径为:
/users/用户名/Library/Developer/Xcode/Archives,
可通过点击图中箭头直接跳转
(博主建议使用自定义路径,便于管理,上传app时,.dSYM要一起上传)
里面是按时间排布的文件夹,找到对应时间的文件进入,找到对应的项目,这里要找准,解析才能正确。命名的规则是项目名+时间+.xcarchive ,只要路径正确,很好找。右键显示包内容,在文件夹dSYMs下就是要找的.dSYM文件了。将.dSYM拷贝到之前桌面上准备的文件夹中,备用。
symbolicatecrash
symbolicatecrash是Xcode自带的解析工具,可以通过dSYM文件将crash文件中的16进制地址转换成可读的函数地址
博主的xcode版本是7.3.1
symbolicatecrash所在的路径是
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources
在别的博客中看到的路径有些不同,这里也列举一下
xcode6.0以前的位置:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources
xcode6.0以后的位置:
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
也将symbolicatecrash拷贝到桌面的准备好的文件夹中。
开始解析
在命令终端输入命令,格式是 Symbolicatecrash + .crash + .dSYM > 输出到的文件 如图 大致意思是:哪个工具,通过哪个dSYM去解析哪个.crash,最后给解析好的文件取个名字
如果提示“DEVELOPER_DIR”is not defined
在终端中输入 :
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
解析完之后桌面文件夹中就会多出解析好的.crash文件,打开这个解析好的.crash,16进制的函数地址已经变成对应的函数名了,到此解析结束,。。。。。接下来就是苦苦的解bug时间了。。。。。