背景
日常迭代开发中,我们用真机测试过程遇到崩溃问题时,有时候因为没有线上堆栈的监控日志,需要人工手动去解析定位堆栈信息
场景
需要手工解析日志一般有两种场景,一种是我们开发者自己的手机闪退了;另一种是别人的手机闪退了。两者主要的区别就是前者是开发者有自带的Xcode,后者可能是测试或用户不太方便连接到Xcode。
方案
开发者本人手机崩溃堆栈分析
针对第一种场景,即崩溃的手机即是开发者本人手机,相对就比较简单。
1、连接手机通过Xcode导出crash日志文件
在MAC电脑中打开Xcode开发工具,选择设备和模拟器(Devieces and Simulators)
2、选中真机设备,查看设备日志
3、选中崩溃的应用导出奔溃日志
导出生成一个xxx.crash
4、查找symbolicatecrash崩溃分析二进制可执行文件
通过在终端执行:find /Applications/Xcode.app -name symbolicatecrash -type f
我们真机设备,使用/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash的文件。
5、xxx.dSYM、xxx.crash和symbolicatecrash统一存放
首先在桌面建一个demo的文件夹用于存放crash相关的文档,然后将导出的xxx.crash文件、应用的xxx.dSYM和symbolicatecrash保存到电脑桌面的demo文件夹中。
6、进入demo文件夹执行symbolicatecrash分析命令
打开终端进入demo文件夹根目录,执行 ./symbolicatecrash xxx.crash xxx.dSYM 命令。此时终端会显示解析后的堆栈。
如果提示 Error: DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69。
需要先在打开的终端中先执行命令: export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
以上就是解析后,定位到的具体堆栈信息。
非本人手机崩溃分析
针对第二种场景,应该是遇到的概率比较多,经常是其他用户或测试真机遇到了奔溃,这时往往需要他们提供给我们用真机导出来的ips文件。
1、用户真机导出ips文件
引导用户通过真机路径的设置->隐私->分析->分析数据,找到对应崩溃应用的日志并导出发送给我们。
2、将ips文件和xxx.dSYM文件存放统一存放
3、 找到CrashSymbolicator.py文件
在Xcode13中MAC电脑可分析ips文件是采用CrashSymbolicator.py文件进行分析,因此我们需要找到CrashSymbolicator.py程序的存储路径,通过find命令查找到路径是/Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources/CrashSymbolicator.py
4、执行分析命令CrashSymbolicator命令
因为CrashSymbolicator.py有其他模块的路径依赖,因此防止依赖报错,我们不将CrashSymbolicator.py复制到我们的demo文件夹中,而是直接执行用python3 执行CrashSymbolicator.py文件,具体命令如下。
python3 /Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources/CrashSymbolicator.py -d xxx.dSYM -p xxx.ips
5、查看崩溃堆栈结果
最后,我们就可以在终端看到,崩溃的具体堆栈啦。
因为CrashSymbolicator.py分析输出JSON格式信息,我们看到的堆栈信息也是JSON格式的。