问题
我正在尝试调试 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/
,如需转载,请注明出处,否则将追究法律责任。