记录一下工作中怎么收集crash日志,以便查看。
一,收集日志共有3种方式
1,Xcode,将手机连上电脑,打开Xcode,在菜单Window->Device->log中,会显示手机中crash日志,然后导出
2,iTunes,让手机和电脑同步,会将崩溃日志保存在电脑上 ( 路径:Mac OS X:~/Library/Logs/CrashReporter/MobileDevice/ )
3,iTools和iFunbox等工具,直接在crash中直接导出
二,解析crash log,共有2中方式
1,symbolicatecrash
- 是Xcode自带的 crash 日志分析工具
- 使用命令找到symbolicatecrash:
find /Applications/Xcode.app -name symbolicatecrash -type f
- 执行完后会返回几个路径,找到iOS对应symbolicatecrash
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash
- 将symbolicatecrash拷贝到一个文件夹下面(假如名字叫crash文件夹)
- 根据前面介绍3中方式拿到crash log,将文件放到crash文件夹
- XCode->Window->Orgainize中找到对应的.xcarchive文件,右键在Finder中找到.dSYM文件或则.app文件,将文件放到crash文件夹
- 执行命令:
./symbolicatecrash .crash文件路径 .dSYM文件路径 > 名字.crash
./symbolicatecrash .crash文件路径 .app/appName 路径 > 名字.crash
有可能报错:
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
执行命令:
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
- 然后再重新生成下新的 .crash 文件就行
2,atos
- 必须确保 .crash 和 .dSYM 文件是匹配的,才能正确符号化,匹配的条件就是它们的 UUID 一致。UUID 是由一组 32 位数的十六进制数字所构成。每一个可执行程序都有一个 build UUID 唯一标识。
- 获取 .crash UUID
grep --after-context=2 "Binary Images:" *crash
- 获取 .dSYM UUID
dwarfdump --uuid Test.app.dSYM
- 获取 .app UUID
dwarfdump --uuid Test.app/test
- 只有UUID一致,符号化才正确
- 假如crash如下:
3 Test 0x0008088e 0x7c000 + 18574
- 执行命令:
xcrun atos -o Test.app.dSYM/Contents/Resources/DWARF/Test -arch armv7 -l 0x7c000
- 接着输入 0x0008088e 地址,终端就会输出符号化的日志
网友评论