NSObjCMessageLoggingEnabled com 3,0 iPhone
-
06-07-2019 - |
Pergunta
Estou a depuração de um programa que foi escrito para o iPhone OS 2.2.1 e tem que ser um pouco reescrito para 3.0. Ter uma lista de todas as chamadas Objective-C mensagens que estão sendo feitas, incluindo "por trás das cenas" chamadas, seria muito útil.
Eu encontrei NSObjCMessageLoggingEnabled em um site, mas não tenho certeza se ele funciona com o iPhone. Alguém sabe se / como isso funciona, e se não, se não houver outra maneira que eu poderia conseguir a mesma coisa?
Obrigado!
Solução
Eu finalmente descobri a um relativamente simples (embora não em todos elegante) maneira de fazer isso.
Durante a depuração no iPhone, eu configurar um ponto de interrupção para objc_msgSend. Eu, então, digitado neste script GDB simples:
while 1
printf "[%s %s]", (char *)object_getClassName($r0), (char *) $r1
c
end
Isso mostra cada chamada de método. Não é perfeito, porque ele imprime o nome da classe do objeto a mensagem está sendo enviada para, e não o objeto em si, mas funciona para o que eu precisava.
Note que este só irá funcionar no próprio iPhone.
Outras dicas
NSObjCMessageLoggingEnabled
(e sua instrumentObjcMessageSends(BOOL)
twin) estão disponíveis no simulador, mas não no dispositivo.