崩溃调试

将crsah日志符号化需要做以下准备

  • .crash日志
  • .dSYM符号集
  • symbolicatecrash工具

获取crash日志的途径

  • 使用友盟、BugHD、Crashlytics等第三方崩溃统计工具
  • 自己实现应用内崩溃收集,并上传服务器
  • 根据以下路径Xcode → Window → Devices → View Device Logs → This Device去直接查看设备的崩溃信息
  • 使用苹果提供的Crash崩溃收集服务

获取.dSYM文件

  • 进入Xcode → Window → Organizer → Archives
  • 选中archive的版本右击选择Show in Finder
  • 可以看到对应.xcarchive文件,右键选择显示包内容,在dSYMs文件夹中就可以获取dSYM文件了

如何确认.crash文件和.dSYM文件是匹配的呢?

  • 将.app文件、.dSYM文件以及.crash文件放到同一个文件夹下,打开终端,定位到该文件夹,继续下面的操作
  • 每一个.dSYM文件都有一个UUID和.app文件中的UUID对应,崩溃信息也有一个单独的UUID,用来和程序的UUID进行校对
  • 查看xxx.app文件的UUID的命令
dwarfdump --uuid xxx.app/xxx
  • 查看xxx.app.dSYM文件的UUID的命令
dwarfdump --uuid xxx.app.dSYM
  • .crash文件内第一行Incident Identifier就是该.crash文件的UUID
  • 如果.crash.dSYM文件的UUID都匹配上了,就可以顺利将16进制堆栈信息进行符号化了
  • 备注:进行崩溃信息符号化的时候,必须使用当前应用打包的电脑所生成的dSYM文件,其他电脑生成的文件可能会导致分析不准确的问题

获取Xcode自带的symbolicatecrash工具

  • Xcode8获取路径
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
  • Xcode7获取路径
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

将crash日志进行符号化的步骤

  • .crash.dSYM文件和symbolicatecrash工具放在同一级文件夹下,比如我这里放在桌面的Crash文件夹中
  • 打开终端,cd到Crash文件夹下,再执行下面的命令,会生成符号化好的symbol.crash文件
./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash
  • 如果上面命令不成功,执行下面的命令,再执行上面的命令就可以了
#设置一下导出的环境变量
export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer
#检查一下环境变量
xcode-select -print-path

以下情况不会有崩溃信息产生

  • 内存访问错误(不是野指针错误)
  • 低内存,当程序内存使用过多会造成系统低内存的问题,系统会将程序内存回收
  • 因为某种原因触发看门狗机制

通过Xcode查看设备崩溃信息

  • 根据以下路径Xcode → Window → Devices → View Device Logs → This Device去直接查看设备的崩溃信息
  • 只要手机上安装的应用是由当前查看崩溃信息的电脑打包的,系统会自动为我们将崩溃信息符号化好,点击日志文件进去之后等一会(不要相信这里面的进度刷新,并不准确)就会自动符号化好,如果还是没有符号化完毕,我们选择文件右击选择Re-Sysbomlicate就可以了
  • 如果不是在这台电脑打包的,就按照上面的将crash日志中的16进制堆栈信息进行符号化的步骤一步步操作

第三方工具恶意覆盖

  • 我们解析崩溃信息时,看到崩溃堆栈只有main.m文件中的崩溃,并且确定不是因为main.m文件中的bug导致的崩溃,就基本可以确定是NSSetUncaughtExceptionHandler()函数指针被恶意覆盖

第三方崩溃分析工具推荐

  • BugHD
  • 友盟
  • Crashlytics

参考资料

  • iOS开发技巧-崩溃调试
  • dSYM 文件分析工具

你可能感兴趣的:(崩溃调试)