symbolicate iOS Crash Log

1 篇文章 0 订阅

 原:http://nixwang.com/2015/04/24/symbolicate-crash-log/#more


本文介绍的是如何处理 Xcode 无法自动 Symbolicate 的 Crash log。

如果你得到这样的 Crash log,你一定想知道其中的 0x4a000 + 37204 究竟对应哪个方法调用。

1
2
3
4
5
6
7
0   CoreFoundation                  0x2dc73f7e __exceptionPreprocess + 126
1   libobjc.A.dylib                 0x384eecca objc_exception_throw + 34
2   CoreFoundation                  0x2dc77912 -[NSObject(NSObject) doesNotRecognizeSelector:] + 198
3   CoreFoundation                  0x2dc761fe ___forwarding___ + 702
4   CoreFoundation                  0x2dbc5764 _CF_forwarding_prep_0 + 20
5   YourAppName                     0x00053154 0x4a000 + 37204
6   UIKit                           0x306f1c52 -[UIApplication _sendWillEnterForegroundCallbacks] + 90

首先计算 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
2
3
4
5
6
7
8
9
10
11
12
Load command 1
      cmd LC_SEGMENT
  cmdsize 736
  segname __TEXT
   vmaddr 0x00004000
   vmsize 0x00314000
  fileoff 0
 filesize 3227648
  maxprot 0x00000005
 initprot 0x00000005
   nsects 10
    flags 0x0

其中的 vmaddr 即 silde。

然后计算 symbol address (可以用 Google),在本例中就是:

0x00004000 + 37204 = 0xD154

最后执行:

1
atos -arch armv7 -o YourAppName.app/YourAppName 0xD154

就可以得到崩溃中与自己编写的逻辑相关的代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值