2010-05-06 3 views
5

Ho scritto una macro di debug che stampa sulla console la stringa passata ogni volta che il flag globale kDebug == YES.Chiamare una macro ogni volta che viene chiamato un metodo - Obiettivo C

Ho bisogno di stampare il nome di un metodo e il suo nome di classe ogni volta che viene chiamato un metodo.

Questo funziona correttamente quando passo scrupolosamente ogni metodo e scrivo il nome della classe e il metodo in una stringa.

C'è qualche gestore speciale che viene chiamato quando viene chiamato qualsiasi metodo in Objective-C, e in tal caso, c'è un modo in cui posso in qualche modo sovrascriverlo per chiamare la mia macro di debug?

L'intero scopo di questo è che non devo passare attraverso tutti i metodi nel mio codice e codificare manualmente la firma del metodo nella chiamata alla macro di debug.

risposta

6

Se si sta cercando una funzione di registrazione dei metodi, invece di crearne una propria, uno è effettivamente incorporato nel runtime Objective-C.

Si potrebbe desiderare di leggere oltre la sezione Objective-C di Apple Technote 2124: Technical Note TN2124: Mac OS X Debugging Magic

Io consiglio anche la lettura di più di post di blog di Dave Dribin sull'utilizzo struttura del tempo di esecuzione per il tracciamento dei messaggi. Puoi trovarlo qui: Tracing Objective-C messages - Dave Dribin's Blog. Dave nota una funzione logObjCMessageSend chiamata, che è possibile utilizzare per personalizzare il comportamento di registrazione. È un po 'complicato da usare, ma Dave fornisce le informazioni necessarie per usarlo con successo.

+0

si può spiegare con la semplice codice? – Shamsiddin

4

Dai uno sguardo allo Dtrace. Instruments fornisce un'interfaccia GUI. Puoi, ad esempio, fornire un'espressione regolare per abbinare tutti i metodi che vuoi registrare.

0

sembra che stavate cercando la macro __PRETTY_FUNCTION__ ... ma la risposta accettata è probabilmente un modo migliore per andare.