一、atos符号化。
atos符号化的关键主要是:找到崩溃日志的UUID,相对地址和绝对地址。这里以百度统计为例(百度官方也有提供手动解析的方法,但是文档不是很详细,我试了没有成功,暂不清楚是哪步搞错了。以下是我结合网上教程总结出来的方法,亲测有效)。
1、分析错误日志。
在百度统计平台找到错误信息,百度已经将UUID和相对地址给我们标记好了。如图,找到UUID、相对地址、绝对地址:
注意:绝对地址要你的app名称后面的才有用,这里我的app名称为WHBJ。
2、找到提交app时使用的.xcarchive文件和.dSYM文件(以下appName为你的项目名称)。
在XCode -> Window -> orgnizer打开archive界面,找到对应的archive包,右键 -> show in finder -> 显示包内容,找到dSYMs文件,里面可能包含好几个.dSYM文件,其中一个名为appName.app.dSYM,其它均为UUID.dSYM,找到UUID为B472A07C-A09E-3798-98B1-FF137B3D0CF5的.dSYM文件,显示包内容 -> Contents -> Resources -> DWARF,找到appName文件。
3、终端查看详细日志信息。
打开终端,输入xcrun atos -arch arm64 -o appName文件路径 -l 相对路径 绝对路径
回车就可以查看详细信息了,如下图:
运行结果:-[YLfilterView updateAddress] (in WHBJ) (YLfilterView.m:334),含类名,方法名和行数。
4、注意事项。
如果找不到对应UUID的文件,则在终端 cd 到dSYMs文件夹,输入dwarfdump --uuid AppName.app.dSYM 查看AppName.app.dSYM的UUID是否与百度统计一致,一致则用这个文件解析,解析方法同上。
代码收集的崩溃信息没有直接显示相对地址信息,需要自己去计算。如图:
系统收集崩溃信息中也有直接显示UUID,相对路径和绝对路径。如图:
系统日志的查看方式有如下三种:
- Xcode -> Window -> Organize -> Crashes中查看。
- Xcode -> Window -> Device and Simulators -> 选中设备 -> View Device Logs。
- 用户手机设置 -> 隐私 -> 分析与改进 -> 分析数据里查看。
二、symbolicatecrash
符号化(iOS14及以下可用)。
首先我们需要找到symbolicatecrash
文件:
// 该文件一般在该路径下
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
// 如果在上面路径找不到的话可以通过命令进行查找。
find /Applications/Xcode.app -name symbolicatecrash -type f
将symbolicatecrash文件、dsym文件、crash文件分别复制到一个文件夹下面。然后cd到新建的文件夹内,使用命令进行符号化,如:
// cd到新建的文件夹内
cd xxx
// 使用命令进行符号化
./symbolicatecrash [crash文件或ips文件] [dSYM文件] > [符号化后的新文件名称.crash]
// 例如
./symbolicatecrash ErrorTest.crash ErrorTest.app.dSYM > newCrash.crash
如果执行命令报错:
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 75.
// 需要设置环境变量
export DEVELOPER_DIR="/Applications/XCode.App/Contents/Developer"
No crash report version in [文件名].crash at ./symbolicatecrash line 1371.
// 该崩溃信息可能需要使用 CrashSymbolicator.py 进行解析
三、CrashSymbolicator.py
符号化(iOS15及以上可用)。
该方式与symbolicatecrash
方式类似,首先需要找到CrashSymbolicator.py
文件:
# 该文件一般在该路径下
/Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources/CrashSymbolicator.py
# 如果在上面路径找不到的话可以通过命令进行查找。
find /Applications/Xcode.app -name CrashSymbolicator -type f
在找到该文件后不要
将它copy到其他文件夹内,否则会出现找不到头文件的问题。
# 执行命令
python3 [CrashSymbolicator.py文件路径] -d [dSYM文件路径] -o [符号化后的新文件名称.ips] -p [崩溃信息ips文件路径]
# 例如
python3 /Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources/CrashSymbolicator.py -d /Users/kenan/Desktop/15.0.2/ErrorDemo.app.dSYM -o newCrash.ips -p /Users/kenan/Desktop/15.0.2/ErrorDemo.ips
参考:
1、iOS线上崩溃追踪。
2、iOS 崩溃日志符号化。