解析奔溃日志.ips

有的时候线上版本会出现隐性Bug并且debug不能大概率复现,造成难以断点调试。这个时候测试会丢过来一个.ips的文件包,需要手动定位。

崩溃日志

准备动作

  • .ips文件后缀改成.crash

  • 发布版本的.app.dSYM文件。一定要是你产生报错日志的版本。获取方式:Window -> Organizer 找到你发包版本 右键 show in Finder 。.xcarchive文件下显示包内容 dSYMs -> 获取。

路径
  • 新建的一个文件夹例如:Crash。将xxx.app.dSYM.crash放入新建的文件夹中。

打开终端

1:先获取symbolicatecrash工具,

去如下路径/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash去复制symbolicatecrash到crash文件夹内。这个时候你crash文件夹内有三个文件如下图:
15459741693652.jpg

2:终端命令解析

  • cd到你的创建的crash文件夹

  • ./symbolicatecrash ./xxx.crash ./xxx.app.dSYM > log.crash (symbolicatecrash路径 空格 .crash路径 空格 .app.dSYM路径 输出log的crash格式文件)

可能会出现如下错误:Error: "DEVELOPER_DIR" is not defined at /Users/snailchen/Desktop/crash/symbolicatecrash line 69.

  • xcode-select -print-path 检查一下:如果不是/Applications/Xcode.app/Contents/Developer/则输入export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer

  • 验证xcode-select -print-path

验证
  • 重复步骤2,会新生成一个log.crash文件

3:打开后就是一些堆栈的日志

这里我就不分析一些常见的bug了有兴趣的可以去Google/Baidu一下:Watchdog timeoutUser force-quitLow Memory termination等等
日志

如上图可以定位到如下,可以看出这个错误,上面只给出了一个内容地址,连大概的错误原因都没有,一般情况下如果是数组越界,空值等等会显示一个基本提示。但是就算如此也是不够的,我们需要进一步定位。

12  xxxx                        0x00000001001a20fc 0x100070000 + 1253628
13  xxxx                        0x00000001003fe9b0 0x100070000 + 3729840
14  xxxx                        0x00000001004ced48 0x100070000 + 4582728
15  xxxx                        0x00000001005e6608 0x100070000 + 5727752

进一步定位

前往至发布版本的dSYMs文件夹下,显示包内容

路径
我们 cd 到该文件目录下
atos -arch arm64 -o xxxx 0x100070000 (xxxx:为你APP即如上图的SDKTest)
这样就定位到项目中的具体报错了 : 的.m 文件的69行。
定位

3:赶紧去解Bug吧。

推荐阅读更多精彩内容