NSObjCMessageLoggingEnabled con iPhone 3.0
-
06-07-2019 - |
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!
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.