Domanda

Sto eseguendo il debug di un programma che è stato scritto per iPhone OS 2.2.1 e deve essere leggermente riscritto per 3.0. Avere un elenco di tutte le chiamate ai messaggi Objective-C che vengono effettuate, incluso "dietro le quinte" chiamate, sarebbe molto utile.

Ho trovato NSObjCMessageLoggingEnabled su un sito Web, ma non sono sicuro che funzioni con l'iPhone. Qualcuno sa se / come funziona e, in caso contrario, se esiste un altro modo per ottenere la stessa cosa?

Grazie!

È stato utile?

Soluzione

Alla fine ho trovato un modo relativamente semplice (anche se per niente elegante) per farlo.

Durante il debug su iPhone, ho impostato un breakpoint per objc_msgSend. Ho quindi digitato questo semplice script GDB:

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

Stampa ogni chiamata di metodo. Non è perfetto, perché stampa il nome della classe dell'oggetto a cui viene inviato il messaggio e non l'oggetto stesso, ma funziona per ciò di cui avevo bisogno.

Nota che funzionerà solo sull'iPhone stesso.

Altri suggerimenti

NSObjCMessageLoggingEnabled (e il suo instrumentObjcMessageSends (BOOL) ) sono disponibili nel simulatore, ma non sul dispositivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top