NSObjCMessageLoggingEnabled с iPhone 3.0 - PullRequest
3 голосов
/ 23 июня 2009

Я отлаживаю программу, которая была написана для iPhone OS 2.2.1 и должна быть слегка переписана для 3.0. Было бы очень полезно иметь список всех выполняемых вызовов сообщений Objective C, включая вызовы "за кадром".

Я нашел NSObjCMessageLoggingEnabled на веб-сайте, но не уверен, работает ли он с iPhone. Кто-нибудь знает, если / как это работает, и если нет, если есть другой способ, которым я мог бы добиться того же?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 24 июня 2009

Я наконец нашел относительно простой (хотя и не совсем элегантный) способ сделать это.

Во время отладки на iPhone я установил точку останова для objc_msgSend. Затем я набрал этот простой скрипт GDB:

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

Это распечатывает каждый вызов метода. Он не идеален, потому что он печатает имя класса объекта, которому отправляется сообщение, а не сам объект, но работает для того, что мне нужно.

Обратите внимание, что это будет работать только на самом iPhone.

1 голос
/ 23 июня 2009

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

...