English 中文(简体)
使用GDB检查Objective C类的崩溃(HandleDelegateSource访问错误)。
原标题:
  • 时间:2008-11-25 18:23:12
  •  标签:

我正在尝试调试iPhone上的间歇性错误,崩溃时跟踪信息看起来像:

objc_message_send
__invoking__
[NSInvocation invoke]
HandleDelegateSource
MainRunLoop
....

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

问题回答

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

Simulator: display /s $ecx
Device: display /s $r1

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

objc_msgSend
Sends a message with a simple return value to an instance of a class.
id objc_msgSend(id theReceiver, SEL theSelector, ...)

Parameters
theReceiver
A pointer that points to the instance of the class that is to receive the message.
theSelector
The selector of the method that handles the message.
...
A variable argument list containing the arguments to the method.





相关问题
热门标签