ITPub博客

首页 > 应用开发 > IT综合 > 使用 GDB 从崩溃中检查 Objective C 类(HandleDelegateSource 错误访问)

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

IT综合 作者:itchaindev 时间:2022-04-10 11:28:27 0 删除 编辑

问题

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

objc_message_send
__invoking__
[NSInvocation invoke]
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 错误访问)


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70016198/viewspace-2886374/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2022-04-02

  • 博文量
    12
  • 访问量
    3420