Question

J'essaie d'envoyer des messages aux objets Objective-C dans gdb.

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

Je ne peux lui envoyer aucun message.Est-ce que j'ai raté quelque chose ?Ai-je vraiment besoin des symboles, ou autre chose ?

Était-ce utile?

La solution

Si vous devez remplacer gdb et envoyer un message à un objet alors qu'il ne vous le permet pas, vous pouvez utiliser 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 vous devez passer un argument, utilisez withObject :

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

Autres conseils

Est-il possible que vous deviez lancer un casting $esi?

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

@[John Calsbeek]

Ensuite, il se plaint de symboles manquants.

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

J'ai essayé de charger les symboles pour 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.

mais toujours pas de chance :

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

Quoi qu'il en soit, je ne pense pas que le casting soit la solution à ce problème, vous ne devriez pas avoir à savoir de quel type d'objet il s'agit pour pouvoir lui envoyer des messages.Ce qui est étrange, c'est que j'ai trouvé un NSCFArray auquel je n'ai aucun problème à envoyer des messages :

(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

donc je suppose qu'il y avait un problème avec l'objet sur lequel j'enquêtais...ou quelque chose.

Merci pour votre aide!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top