icon bar apple app iphone objective-c debugging

iphone - apple - search bar ios



¿Cómo miro un objeto en el depurador de Xcode? (4)

Hay un par de cosas que puedes hacer.

  1. Puede insertar un punto de interrupción que se activará cada vez que tenga una excepción, así que básicamente cree un punto de interrupción para esto (vaya a los puntos de interrupción y cree uno nuevo): - [NSException raise]
  2. Alternativamente, puedes ver realmente cuál es el objeto en esa ubicación mem:

    info símbolo 0x1081ad0 o

    línea de información * 0x1081ad0

Hay más información en la entrada wiki de cocoadev para consejos de manejo de excepción y eliminación de errores para el objetivo C en cocoawithlove .

Tengo una pregunta simple sobre la depuración en Xcode y GDB.

A menudo me encuentro con un error:

unrecognized selector sent to instance 0x1081ad0

lo que hace que el programa se cargue en GDB. ¿Hay una manera fácil de examinar qué instancia se encuentra en esa memoria de GDB?


Steven tiene razón: el comando gdb po es un acceso directo para print-object , que en realidad llama a -debugDescription (no -description , como podría esperarse) en el objeto proporcionado como argumento. En muchos casos, verá el mismo resultado de ambos métodos, ya que uno llama al otro a menos que se invalide. (Consulte la Nota relacionada : llamada en esta nota técnica de Apple para obtener detalles. Tenga en cuenta que en su muestra de código, po $r3 imprime el contenido de un registro de PowerPC, pero puede usar cualquier puntero / referencia de objeto, incluidos los registros de Intel, etc.)

Además, tenga en cuenta que print-object solo funcionará en objetos válidos que no se hayan desasignado. No servirá de nada si está enviando un mensaje a un puntero borked. Sin embargo, dado el error que usted citó, parecería que es una instancia de objeto válida, simplemente no implementa el método que está tratando de invocar.

También es remotamente posible que el objeto ya haya sido destruido. Esta respuesta debería ayudar en ese caso.

Editar:

Hay otras formas de "examinar" los objetos en el depurador. Le hice esta pregunta sobre los formateadores de datos Xcode, que es una forma de determinar cómo aparece una clase personalizada en la columna Resumen del depurador. La documentación vinculada a esa pregunta explica cómo funciona. Encontré el enfoque de resumen para ayudar mucho a ver el estado de un objeto.


Su instancia no es válida. Ha liberado el objeto en otro lugar, pero no borró el puntero ... habilitó la detección de zombies.


po 0x1081ad0

po = Imprimir objeto. Incluso puedes llamar a métodos, como

po [myArray objectAtIndex:0]

Tenga en cuenta que sólo funciona en objetos, por lo que

po 1

bloqueará su programa.