Pregunta

Estoy depurando un programa que fue escrito para iPhone OS 2.2.1 y tiene que ser reescrito ligeramente para 3.0. Tener una lista de todas las llamadas de mensajes de Objective-C que se están haciendo, incluyendo "detrás de escena" llamadas, sería muy útil.

Encontré NSObjCMessageLoggingEnabled en un sitio web, pero no estoy seguro de si funciona con el iPhone. ¿Alguien sabe si / cómo funciona esto, y si no, si hay otra forma en que podría lograr lo mismo?

¡Gracias!

¿Fue útil?

Solución

Finalmente descubrí una forma relativamente simple (aunque nada elegante) de hacer esto.

Durante la depuración en el iPhone, configuré un punto de interrupción para objc_msgSend. Luego escribí este simple script GDB:

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

Esto imprime cada llamada al método. No es perfecto, porque imprime el nombre de la clase del objeto al que se envía el mensaje y no el objeto en sí, pero funciona para lo que necesitaba.

Tenga en cuenta que esto solo funcionará en el iPhone mismo.

Otros consejos

NSObjCMessageLoggingEnabled (y su gemelo instrumentObjcMessageSends (BOOL) ) están disponibles en el simulador, pero no en el dispositivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top