2009-06-22 8 views
2

Я отлаживаю программу, написанную для iPhone OS 2.2.1, и ее нужно немного переписать для версии 3.0. Наличие списка всех вызовов сообщений Objective-C, которые выполняются, включая вызовы «за кадром», было бы очень полезно.NSObjCMessageLoggingEnabled with 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 –

1

NSObjCMessageLoggingEnabled (и его близнец instrumentObjcMessageSends(BOOL)) доступны в симуляторе, но не на устройстве.

+0

Спасибо. Я нашел другой (менее элегантный) способ использования GDB. – dvorak