2008-09-11 7 views
11

Ich versuche, Nachrichten an Objective-C-Objekte in gdb zu senden.Senden von Nachrichten an Objekte beim Debuggen von Objective-C in gdb, ohne Symbole

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

Ich kann keine Nachricht an sie senden. Fehle ich etwas? Brauche ich wirklich die Symbole oder etwas anderes?

+0

Hinweis: Das [reversing] -Tag soll nicht zur Beschreibung von Reverse-Engineering-Themen verwendet werden. Verwenden Sie stattdessen [Reverse-Engineering] – user1354557

Antwort

10

Wenn Sie müssen gdb außer Kraft setzen und eine Nachricht an ein Objekt senden, wenn sie nicht im Stich lassen wird, können Sie perform verwenden:

(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 

Wenn Sie ein Argument verwenden withobject übergeben müssen:

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

Ist es möglich, dass Sie $esi casten müssen?

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

@ [John Calsbeek]

Dann klagt es über fehlende Symbole.

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

Ich habe versucht, die Symbole für Foundation zu laden:

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

aber noch kein Glück:

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

Wie dem auch sei, ich Gießen nicht glaube, die Lösung für dieses Problem ist, Sie sollten nicht wissen müssen, um was für ein Objekt es sich handelt, um Nachrichten an sie senden zu können. Die seltsame Sache ist, dass ich eine NSCFArray fand ich habe keine Probleme, das Senden von Nachrichten an:

(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 

also denke ich, gibt es ein Problem mit dem Objekt war ich nachforschte ... oder so ähnlich.

Danke für Ihre Hilfe!

Verwandte Themen