iOS 从手机中收集crash log并解析

记录一下工作中怎么收集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 地址,终端就会输出符号化的日志

你可能感兴趣的:(iOS 从手机中收集crash log并解析)