El envío de mensajes a los objetos, mientras que la depuración de Objective-C en gdb, sin símbolos

StackOverflow https://stackoverflow.com/questions/56472

Pregunta

Estoy tratando de enviar mensajes a Objective-C los objetos en gdb.

(gdb) p $esi
$2 = (void *) 0x1268160
(gdb) po $esi
<NSArray: 0x1359c0>
(gdb) po [$esi count]
Target does not respond to this message selector.

No puedo enviar ningún mensaje.Me estoy perdiendo algo?¿Realmente necesito los símbolos, o algo más?

¿Fue útil?

Solución

Si debe reemplazar gdb y enviar un mensaje a un objeto cuando ya no te lo permite, puede utilizar performSelector:

(gdb) print (int)[receivedData count]
Target does not respond to this message selector.

(gdb) print (int)[receivedData performSelector:@selector(count) ]
2008-09-15 00:46:35.854 Executable[1008:20b] *** -[NSConcreteMutableData count]:
unrecognized selector sent to instance 0x105f2e0

Si usted necesita para pasar un argumento uso withObject:

(gdb) print (int)[receivedData performSelector:@selector(count) withObject:myObject ]

Otros consejos

Es posible que usted necesita para lanzar $esi?

p (NSUInteger)[(NSArray *)$esi count]

@[Juan Calsbeek]

Luego se queja sobre la falta de símbolos.

(gdb) p (NSUInteger)[(NSObject*)$esi retainCount]
No symbol table is loaded.  Use the "file" command.
(gdb) p [(NSArray *)$esi count]
No symbol "NSArray" in current context.

He intentado cargar los símbolos para la Fundación:

(gdb) add-symbol-file /System/Library/Frameworks/Foundation.framework/Foundation 
add symbol table from file "/System/Library/Frameworks/Foundation.framework/Foundation"? (y or n) y
Reading symbols from /System/Library/Frameworks/Foundation.framework/Foundation...done.

pero todavía no hay suerte:

(gdb) p [(NSArray *)$esi count]
No symbol "NSArray" in current context.

De todos modos, no creo que el casting es la solución a este problema, usted no debería tener que saber qué tipo de objeto es, ser capaz de enviar mensajes.Lo extraño es que he encontrado un NSCFArray no tengo problemas para enviar mensajes a:

(gdb) p $eax
$11 = 367589056
(gdb) po $eax
<NSCFArray 0x15e8f6c0>(
    file://localhost/Users/ask/Documents/composing-fractals.pdf
)

(gdb) p (int)[$eax retainCount]
$12 = 1

así que supongo que hubo un problema con el objeto de que yo estaba investigando...o algo así.

Gracias por su ayuda!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top