提前准备 MyApp.app.dSYM 符号表文件。

使用atos命令来完成符号化,在手动解析时,对不同系统版本的崩溃日志的兼容性较好。具体命令如下:

$atos -arch <Binary Architecture> -o <Path to dSYM file>/Contents/Resources/DWARF/<binary image name> -l <load address> <address to symbolicate>

例如:

$atos -arch arm64 -o MyApp -l 0x0000000102728000

参数说明:

  1. Binary Architecture:arm64、armv6、armv7armv7s 根据自己的情况来写。
  2. Path to dSYM file: dSYM文件的路径。
  3. binary image name: 你工程的名字。
  4. load address: 基地址,如果我们的崩溃日志中没有这个信息,laod address = address to symbolicate - offset
  5. address to symbolicate:当前方法的内存地址

实操案例:

一条崩溃日志如下:

MyApp 0x0000000103ef6970 0x0000000102728000 + 24963440

地址计算,计算可知:

0x0000000103ef6970(address to symbolicate)= 0x0000000102728000(load address) + 24963440(offset)

一般以app命名的地方就是崩溃的位置。0x0000000103ef6970为虚拟内存地址,0x0000000102728000为基地址。

开始进行命令行操作,cd .../DWARF到这个文件夹下
输入命令行:

atos -arch arm64 -o MyApp -l 0x0000000102728000

回车后继续输入

0x0000000103ef6970(虚拟内存地址)

然后就会得到终端输出的崩溃堆栈细节如下:

-[XXXWasmCallManager didReceiveConvertedAudioData:size:] (in MyApp) (XXXWasmCallManager:364)