Вопрос

Я отлаживаю программу, которая была написана для 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)) доступны в симуляторе, но не на устройстве.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top