对比UUID
对比.crash
和.dSYM文件的UUID是否一致
获取.dSYM的UUID
xcrun dwarfdump --uuid <dSYM文件路径>
获取.crash
的UUID
可以在文件堆栈下面的首行找到
符号化
- 搜索symbolicatecrash工具
find /Applications/Xcode.app -name symbolicatecrash -type f
- Xcode11 的路径
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
-
找到"symbolicatecrash" 文件, 复制然后粘贴到刚才创建的 "CrashReport" 文件夹里面
集齐
.crash
、.app.dSYM
、symbolicatecrash
三个文件即可cd到当前文件夹
命令行输入:
export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer
- 命令行输入
./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash
如果是.ips文件,则输入
./symbolicatecrash ./*.ips ./*.app.dSYM > symbol.crash
- 等待完成
使用atos进行符号化
从中选出一条调用进行符号化:
4 UnityFramework 0x000000010b86b8d0 0x10a7f8000 + 17250512
使用下面的命令符号化:
atos -arch arm64 -o a6ad066c.dSYM -l 0x10a7f8000 0x000000010b86b8d0
结果:
+[IronSource initWithAppKey:adUnits:] (in UnityFramework) (IronSource.m:69)
可以看到崩溃的类为 IronSource,函数为 initWithAppKey:adUnits:
,文件名是 IronSource,行数是 69 行。
我们返回来看一下atos 用法:
atos -o dysm文件路径 -l 模块load地址 -arch cpu指令集种类 调用方法的地址
dysm 文件路径:可以在 Xcode Organizer 的 Archives 标签栏下找到所有已归档的应用文件。它保存了编译过程的详细信息,其中包括符号信息。
模块 load 地址:模块加载的基地址,可以在日志的动态库信息中找到对应模块的基地址。这里为 0x66000.
cpu 指令集种类:可以为 armv6 armv7 armv7s arm64。具体用哪个,可以参考对应模块的动态库信息中确定。如
0x66000 - 0x19cdfff +TestProduct armv7 <43ebe409980f31fd9be165a64b002af5> /var/mobile/Applications/E3B51E77-D44D-4B3E-8767-B7DC2008D138/TestProduct.app/TestProduct
那么 TestProduct 模块的 cpu 指令集为 armv7
调用方法的地址:这里是 0x012c03e1