其次,验证xxx.crash、xxx.app和xxx.dSYM三者的uuid是否一致。
验证方法:
1)查看xxx.app的uuid。
- $ dwarfdump --uuid mobileguard.app/mobileguard
2)查看xxx.dSYM的uuid。
- $ dwarfdump --uuid mobileguard.app.dSYM/Contents/Resources/DWARF/mobileguard
3)xxx.crash。
Note:
在这之前,需要找到对应的app和dSYM文件。这两个文件是在后缀为.archive的文件中,在我的机器(Mac OS 10.9.1,Xcode5.0.2)上,.archive文件在“/Users/mikelin/Library/Developer/Xcode/Archives/”文件夹下对应的日期文件夹中,也可以从Xcode > Organizer > Archive 下找到对应的Archive包。
确保三者uuid一致以后,用symbolicatecrash工具生成易读的日志信息。
首先找到symbollicatecrash工具在哪里:
find /Applications/Xcode.app -name symbolicatecrash -type f
你会找到:
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
方法一:使用.crash文件和dsym文件
先准备环境:
1)将symbolicatecrash文件拷贝到和那三个文件的同级目录,此方法不需要.app文件。
2)设置xcode DEVELOPER_DIR。
- export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
然后执行命令:
- symbolicatecrash m.crash mobileguard.app.dSYM > n.crash
转载:http://blog.csdn.net/jinzhu117/article/details/20615991
方法二:使用局部崩溃信息和.app文件
如果没有完整的.crash格式的崩溃文件,只有局部的崩溃信息,如下:
- Thread 0 Crashed:
0 libobjc.A.dylib 0x00003ec0 objc_msgSend + 24
1 MyApp 0x000036d2 0×1000 + 9938
其中:0x000036d2为栈地址,0×1000为偏移量。
我们可以在控制台使用atos命令,解析出内存地址,此方法不需要.dsym文件。
- $ atos -o MyApp.app/MyApp -arch arm64(崩溃日志中标明的架构) -l 0×1000(偏移量) 0x000036d2(栈地址)
- 结果示例:__24-[MyApp initBase]_block_invoke.243 (in MyApp) (MyAppStart.m:286)