iOS Crash 杂记

602 阅读2分钟

Crash日志解析

使用 symbolicatecrash 分析崩溃日志

symbolicatecrash 是一个将堆栈地址符号化的脚本 使用Xcode自带的 symbolicatecrash 工具来将 .Crash.dSYM 文件进行符号化,就可以得到详细崩溃的信息。

通过Mac自带的命令行工具解析 Crash 文件需要具备三个文件:

  1. symbolicatecrash Xcode自带的崩溃分析工具,使用这个工具可以更精确的定位崩溃所在的位置,将0x开头的地址替换为相应的代码和具体行数。
  2. 打包应用时产生的 dSYM 文件。
  3. 崩溃时产生的 Crash文件 ,例如:*.crash

解析崩溃信息的时候,可以先在桌面上建立一个Crash文件夹,然后将 .crash.dSYMsymbolicatecrash 放在这个文件夹中,这样进入这个文件夹下,直接一行命令就可以了。

// 执行命令开始符号化crash文件
./symbolicatecrash XX.crash  XX.app.dSYM > xx.crash
// 有时候终端有可能会出现:
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
// 需要输入下面的命令:
export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"

// 解析举例:
./symbolicatecrash /Users/username/Desktop/Demoruntime/testSys/ios12Crash.crash /Users/username/Desktop/Demoruntime/testSys/DemoTest.app.dSYM > ios12SysCrash.crash

使用 Xcode 分析崩溃日志

通过 Xcode 打开 window -> Devices and Simulators 或者直接快捷键 Shift cdm 2 设备管理页。点击 View Device Logs后,可以看到手机的崩溃日志。Xcode 会自动解析。 也可以把带解析的日志拖入该页,然后通过 右键 --> Re-Symbolicate Log 来重新解析。(所需的系统符号表文件需提前导入到 /Users/userName/Library/Developer/Xcode/iOS DeviceSupport 路径下)

UUID

获取dSYM文件中的UUID

// 进入到dSYM文件夹中,使用如下命令
dwarfdump --uuid AppName.app.dSYM
// 打印如下
UUID: CBFCB3CD-8DC1-3236-A936-53C2E2BA78AC (armv7) AppName.app.dSYM/Contents/Resources/DWARF/AppName
UUID: 2CA49492-1F4E-359A-A311-92CF3A912CB6 (arm64) AppName.app.dSYM/Contents/Resources/DWARF/AppName

获取Crash文件的UUID

grep "'Your AppName' arm64" *.crash
grep "demo arm" *.crash

// 打印如下
1227-1.crash:0x104210000 - 0x1042c7fff demo arm64  <b2a23f19d6c633fe925ad5768e87bf33> /var/containers/Bundle/Application/4B304684-7384-4FF1-9A9C-3BC220353C9D/demo.app/demo

Binary Images  后面的 arm 衔接的就是 <uuid>

崩溃日志路径

手机崩溃日志路径

设置 --> 隐私 --> 分析与改进

设置 --> 隐私 --> 分析 --> 分析数据 --> 找到对应App当时的崩溃日志 --> 点击右上角发送按钮

手机崩溃日志路径: 设置 --> 隐私 --> 分析 --> 分析数据 --> 找到对应App当时的崩溃日志 --> 点击右上角发送按钮

iOS模拟器Crash的路径地址

可以进入此目录下查看模拟器的Crash

/Users/pcUserName/Library/Logs/DiagnosticReports

iOS模拟器Crash的路径地址: /Users/电脑用户名/Library/Logs/DiagnosticReports

iOS真机Crash的路径地址--需越狱

可以进入此目录下查看真机的Crash

/var/mobile/Library/Logs/CrashReporter/