2010-05-06 29 views
5

Escribí una macro de depuración que imprime en la consola la cadena pasada cada vez que la bandera kDebug global == YES.Llamar a una macro cada vez que se llama a un método - Objetivo C

Necesito imprimir el nombre de un método y su nombre de clase siempre que se llame a algún método.

Eso funciona bien cuando reviso minuciosamente cada método y escribo el nombre de la clase y el método en una cadena.

¿Hay algún controlador especial que se llame cuando se llama a cualquier método en Objective-C, y si es así, ¿hay alguna forma de que de alguna manera pueda anularlo para llamar a mi macro de depuración?

Todo el propósito de esto es que no tengo que pasar por todos los métodos de mi código y codificar manualmente la firma del método en la llamada a la macro de depuración.

Respuesta

6

Si está buscando una función de registro de métodos, en lugar de crear la suya propia, uno está realmente integrado en el tiempo de ejecución de Objective-C.

Es posible que desee leer sobre la sección de Objective-C de la nota técnica de Apple 2124: Technical Note TN2124: Mac OS X Debugging Magic

También recomendaría leer sobre mensaje de blog de Dave Dribin sobre el uso de las instalaciones del tiempo de ejecución para el seguimiento de mensajes. Puede encontrarlo aquí: Tracing Objective-C messages - Dave Dribin's Blog. Dave señala una función logObjCMessageSend a la que se llama, que puede usar para personalizar su comportamiento de registro. Es un poco complicado de usar, pero Dave proporciona la información necesaria para usarlo con éxito.

+0

puede explicar con código simple? – Shamsiddin

4

Eche un vistazo a Dtrace. Instruments proporciona una interfaz GUI. Puede, por ejemplo, proporcionar una expresión regular para que coincida con todos los métodos que desea registrar.

0

suena como si estuvieras buscando la macro __PRETTY_FUNCTION__ ... pero la respuesta aceptada es probablemente una mejor manera de hacerlo.

Cuestiones relacionadas