iOS崩溃报告符号化

对比UUID

对比.crash和.dSYM文件的UUID是否一致

获取.dSYM的UUID

xcrun dwarfdump --uuid 

获取.crash的UUID

可以在文件堆栈下面的首行找到

符号化

  1. 搜索symbolicatecrash工具
find /Applications/Xcode.app -name symbolicatecrash -type f
  1. Xcode11 的路径
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
  1. 找到"symbolicatecrash" 文件, 复制然后粘贴到刚才创建的 "CrashReport" 文件夹里面


  1. 集齐.crash.app.dSYMsymbolicatecrash三个文件即可

  2. cd到当前文件夹

  3. 命令行输入:

export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer
  1. 命令行输入
./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash

如果是.ips文件,则输入

./symbolicatecrash ./*.ips ./*.app.dSYM > symbol.crash
  1. 等待完成

使用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

你可能感兴趣的:(iOS崩溃报告符号化)