2008-09-11 9 views
11

Estoy intentando enviar mensajes a objetos Objective-C en gdb.Envío de mensajes a objetos mientras se depura Objective-C en gdb, sin símbolos

(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 enviarle ningún mensaje. ¿Me estoy perdiendo de algo? ¿Realmente necesito los símbolos u otra cosa?

+0

Nota: La etiqueta [inverso] no se debe usar para describir temas de ingeniería inversa; use [ingeniería inversa] en su lugar – user1354557

Respuesta

10

Si es necesario sustituir el BGF y enviar un mensaje a un objeto cuando no se 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 tiene que pasar una withObject uso argumento:

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

¿Es posible que necesite emitir $esi?

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

@ [John Calsbeek]

Luego se queja de símbolos que faltan.

(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. 

Me trataron de cargar los símbolos de 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 sigue sin suerte:

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

De todos modos, no creo que la fundición es la solución a este problema, no debería tener que saber qué tipo de objeto es, para poder enviarle 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 había un problema con el objeto estaba investigando ... o algo así.

Gracias por su ayuda!

Cuestiones relacionadas