2008-09-11 6 views
11

J'essaie d'envoyer des messages aux objets Objective-C dans gdb.Envoi de messages à des objets lors du débogage Objectif-C dans gdb, sans symboles

(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 pas envoyer de message. Est-ce que je manque quelque chose? Ai-je vraiment besoin des symboles ou d'autre chose?

+0

Remarque: La balise [inversion] ne doit pas être utilisée pour décrire des sujets de reverse engineering; utiliser [reverse-engineering] à la place – user1354557

Répondre

10

Si vous devez remplacer gdb et envoyer un message à un objet quand il ne vous laissera 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 une utilisation de l'argument withObject:

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

Est-il possible que vous ayez besoin de lancer $esi?

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

@ [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 la Fondation:

(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 la coulée est la solution à ce problème, vous ne devriez pas avoir à connaître le type d'objet pour pouvoir lui envoyer des messages. La chose étrange est que je l'ai trouvé un NSCFArray je n'ai aucun problème d'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 que j'enquêtais ... ou quelque chose.

Merci pour votre aide!

Questions connexes