我正在调试一个为 iPhone OS 2.2.1 编写的程序,并且必须为 3.0 稍微重写。拥有所有正在进行的 Objective-C 消息调用的列表,包括“幕后”调用,将非常有用。
我在一个网站上找到了 NSObjCMessageLoggingEnabled,但不确定它是否适用于 iPhone。有谁知道这是否/如何工作,如果没有,是否有另一种方法可以实现相同的目标?
谢谢!
我正在调试一个为 iPhone OS 2.2.1 编写的程序,并且必须为 3.0 稍微重写。拥有所有正在进行的 Objective-C 消息调用的列表,包括“幕后”调用,将非常有用。
我在一个网站上找到了 NSObjCMessageLoggingEnabled,但不确定它是否适用于 iPhone。有谁知道这是否/如何工作,如果没有,是否有另一种方法可以实现相同的目标?
谢谢!
我终于想出了一个相对简单(虽然一点也不优雅)的方法来做到这一点。
在 iPhone 上调试时,我为 objc_msgSend 设置了一个断点。然后我输入了这个简单的 GDB 脚本:
while 1
printf "[%s %s]", (char *)object_getClassName($r0), (char *) $r1
c
end
这将打印出每个方法调用。它并不完美,因为它打印出消息发送到的对象的类名,而不是对象本身,但它可以满足我的需要。
请注意,这仅适用于 iPhone 本身。
NSObjCMessageLoggingEnabled
(及其双胞胎instrumentObjcMessageSends(BOOL)
)在模拟器中可用,但在设备上不可用。