普遍使用的方法是用symbolicatecrash来解析crash log:
导出crash log 通过Xcode的Organizer查看某台iphone设备的DeviceLog,选择需要的crash log,导出XXX.crash文件。
用symbolicatecrash来解析crash log:
1.首先找到symbolicatecrash所在目录路径
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
2.找到app对应的.dSYM 文件
首先找到最后一次打包提交appstore的archive文件,显示包内容,app对应的.dSYM文件就在dSYMs文件夹中
3.讲 projectName.app.dSYM 文件 和 crash 日志文件放在同一个目录中
4.打开Terminal,并且定位到.dSYM文件和.crash文件所在的文件夹
5.设置DEVELOPER_DIR系统变量
cd ~/
vi .bash_profile
并输入如下内容
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
保存并退出
6.继续输入 ./symbolicatecrash crashFile.crash projectName.app.dSYM > crash.txt
7.打开目录中的crash.txt文件,迅速定位错误代码
注意:symbolicatecrash的参数顺序,否则会报类似如下错误
Use of uninitialized value $data in substitution (s///) at /usr/bin/symbolicatecrash line 678.
Use of uninitialized value $data in substitution (s///) at /usr/bin/symbolicatecrash line 681.
Use of uninitialized value $data in substitution (s///) at /usr/bin/symbolicatecrash line 685.
Use of uninitialized value in pattern match (m//) at /usr/bin/symbolicatecrash line 404.
Use of uninitialized value in scalar assignment at /usr/bin/symbolicatecrash line 418.
No crash report version in XXX.app.dSYM/ at /usr/bin/symbolicatecrash line 954.