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

问题

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

objc_message_send

__invoking__

[NSInvocationinvoke]

HandleDelegateSource

MainRunLoop

....

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

解决方案

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

objc_msgSend

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

id objc_msgSend(id theReceiver, SEL theSelector, …)

参数

theReceiver

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

theSelector

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

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

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

Simulator: display /s $ecx

Device: display /s $r1

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容