3

我正在调试一个为 iPhone OS 2.2.1 编写的程序,并且必须为 3.0 稍微重写。拥有所有正在进行的 Objective-C 消息调用的列表,包括“幕后”调用,将非常有用。

我在一个网站上找到了 NSObjCMessageLoggingEnabled,但不确定它是否适用于 iPhone。有谁知道这是否/如何工作,如果没有,是否有另一种方法可以实现相同的目标?

谢谢!

4

2 回答 2

3

我终于想出了一个相对简单(虽然一点也不优雅)的方法来做到这一点。

在 iPhone 上调试时,我为 objc_msgSend 设置了一个断点。然后我输入了这个简单的 GDB 脚本:

while 1
printf "[%s %s]", (char *)object_getClassName($r0), (char *) $r1 
c
end

这将打印出每个方法调用。它并不完美,因为它打印出消息发送到的对象的类名,而不是对象本身,但它可以满足我的需要。

请注意,这仅适用于 iPhone 本身。

于 2009-06-24T15:54:05.720 回答
1

NSObjCMessageLoggingEnabled(及其双胞胎instrumentObjcMessageSends(BOOL))在模拟器中可用,但在设备上不可用。

于 2009-06-23T09:53:17.583 回答