Crash日志解析
使用 symbolicatecrash 分析崩溃日志
symbolicatecrash 是一个将堆栈地址符号化的脚本
使用Xcode自带的 symbolicatecrash 工具来将 .Crash 和 .dSYM 文件进行符号化,就可以得到详细崩溃的信息。
通过Mac自带的命令行工具解析 Crash 文件需要具备三个文件:
symbolicatecrashXcode自带的崩溃分析工具,使用这个工具可以更精确的定位崩溃所在的位置,将0x开头的地址替换为相应的代码和具体行数。- 打包应用时产生的
dSYM文件。 - 崩溃时产生的
Crash文件,例如:*.crash
解析崩溃信息的时候,可以先在桌面上建立一个Crash文件夹,然后将 .crash 、.dSYM 、symbolicatecrash 放在这个文件夹中,这样进入这个文件夹下,直接一行命令就可以了。
// 执行命令开始符号化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/