2009-06-22 34 views
2

我正在調試爲iPhone OS 2.2.1編寫的程序,並且必須稍微重寫爲3.0。列出所有正在進行的Objective-C消息調用(包括「幕後」調用)將非常有用。NSObjCMessageLoggingEnabled與iPhone 3.0

我在網站上發現了NSObjCMessageLoggingEnabled,但我不確定它是否適用於iPhone。有沒有人知道這是否/如何運作,如果沒有,如果有另一種方式,我可以實現同樣的事情?

謝謝!

回答

2

我終於想出了一個相對簡單的(雖然並不高雅)方式來做到這一點。

在iPhone上進行調試時,我爲objc_msgSend設置了一個斷點。然後我輸入這個簡單的GDB腳本:

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

這打印出每個方法調用。這並不完美,因爲它輸出了消息發送到的對象的類名,而不是對象本身,但它適用於我所需要的。

請注意,這隻適用於iPhone本身。

+0

您可以將其作爲xcode中斷點的操作 – 2009-08-21 13:19:08

1

NSObjCMessageLoggingEnabled(及其孿生子instrumentObjcMessageSends(BOOL))在模擬器中可用,但不在設備上。

+0

謝謝。我發現使用GDB的另一種(不太優雅的)方法。 – dvorak 2009-06-24 15:48:32