本文介绍的是如何处理 Xcode 无法自动 Symbolicate 的 Crash log。
如果你得到这样的 Crash log,你一定想知道其中的 0x4a000 + 37204
究竟对应哪个方法调用。
1 | 0 CoreFoundation 0x2dc73f7e __exceptionPreprocess + 126 |
首先计算 symbol address
由下面这个公式得来:
slide + stack address - load address = symbol address
在上面的 Crash log 中的第 5 行中,0x4a000
就是 load address,0x4a000 + 37204
是 stack address。
现在缺少的是 slide。
下载应用的 .ipa 文件解压,会得到 Payload 目录,在此目录中执行下面的命令:
1 | otool -arch armv7 -l YourAppName.app/YourAppName | grep -B 1 -A 10 "LC_SEGM" | grep -B 3 -A 8 "__TEXT" |
会得到类似下面的结果:
1 | Load command 1 |
其中的 vmaddr 即 silde。
然后计算 symbol address (可以用 Google),在本例中就是:
0x00004000 + 37204 = 0xD154
最后执行:
1 | atos -arch armv7 -o YourAppName.app/YourAppName 0xD154 |
就可以得到崩溃中与自己编写的逻辑相关的代码。