使用 GDB 从崩溃中检查 Objective C 类(HandleDelegateSource 错误访问)

问题

我正在尝试调试 iPhone 上的间歇性错误,崩溃的痕迹如下所示:

<span style="color:#003b61"><span style="background-color:#ffffff"><code class="language-objectivec">objc_message_send
__invoking__
[NSInvocation invoke]
HandleDelegateSource
MainRunLoop
....
</code></span></span>

当 GDB 停止时,我希望能够确定有关系统尝试调用哪个选择器的详细信息 – 我现在在 [NSInvocation Invoke] 周围设置了一个断点,但从那时起无法弄清楚如何检查详细信息我停止的 NSInvocation 对象。

解决方案

如果您查看objc_msgSend的参考信息,您将看到选择器是第二个参数。现在应该更容易破译调试器的输出了。

objc_msgSend

将带有简单返回值的消息发送到类的实例。

id objc_msgSend(id theReceiver, SEL theSelector, …)

参数

theReceiver

指向要接收消息的类的实例的指针。

theSelector

处理消息的方法的选择器。



包含方法参数的变量参数列表。

在 GDB 中,您可以简单地查看带有被调用选择器名称的寄存器(lothar 答案中的 Selector 参数)。它是一个 C 字符串,因此您可以使用以下命令之一观察它(取决于您是在模拟器还是设备中运行):

<span style="color:#333333"><span style="background-color:#ffffff"><code class="language-objectivec">Simulator: display /s $ecx
Device: display /s $r1</code></span></span>

原文链接:使用 GDB 从崩溃中检查 Objective C 类(HandleDelegateSource 错误访问)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值