Domanda

Sto provando a inviare messaggi agli oggetti Objective-C in gdb.

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

Non riesco a inviargli alcun messaggio.Mi sto perdendo qualcosa?Ho davvero bisogno dei simboli o di qualcos'altro?

È stato utile?

Soluzione

Se devi sovrascrivere gdb e inviare un messaggio a un oggetto quando non te lo consente, puoi utilizzare 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

Se devi passare un argomento usa withObject:

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

Altri suggerimenti

È possibile che tu abbia bisogno di lanciare $esi?

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

@[John Calsbeek]

Quindi si lamenta dei simboli mancanti.

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

Ho provato a caricare i simboli per Foundation:

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

ma ancora senza fortuna:

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

Comunque non credo che il casting sia la soluzione a questo problema, non dovresti sapere che tipo di oggetto è per potergli mandare messaggi.La cosa strana è che ho trovato un NSCFArray a cui non ho problemi a inviare messaggi:

(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

quindi immagino ci sia stato un problema con l'oggetto su cui stavo indagando...o qualcosa.

Grazie per l'aiuto!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top