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