2008-09-11 21 views
11

मैं जीडीबी में उद्देश्य-सी ऑब्जेक्ट्स को संदेश भेजने की कोशिश कर रहा हूं।जीडीबी में उद्देश्य-सी डीबग करने के दौरान ऑब्जेक्ट्स को संदेश भेजना, प्रतीकों के बिना

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

मैं इसे कोई संदेश नहीं भेज सकता। क्या मैं कुछ भूल रहा हूँ? क्या मुझे वास्तव में प्रतीकों की आवश्यकता है, या कुछ और?

+0

नोट: रिवर्स इंजीनियरिंग विषयों का वर्णन करने के लिए [रिवर्सिंग] टैग का उपयोग नहीं किया जाना चाहिए; इसके बजाय [रिवर्स-इंजीनियरिंग] का उपयोग करें – user1354557

उत्तर

10

आप gdb को ओवरराइड और एक वस्तु जब यह आप नहीं दूँगी के लिए एक संदेश भेजना चाहिए, तो आप 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 

आप एक तर्क उपयोग withObject पारित करने के लिए की जरूरत है:

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

क्या यह संभव है कि आपको $esi डालना होगा?

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

@ [जॉन Calsbeek]

तो यह लापता प्रतीकों के बारे में शिकायत।

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

मैं फाउंडेशन के लिए प्रतीकों लोड करने का प्रयास:

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

लेकिन फिर भी प्रयास विफल:

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

वैसे भी, मैं कास्टिंग इस समस्या का समाधान है नहीं लगता है, आपको यह नहीं पता होना चाहिए कि संदेश भेजने में सक्षम होने के लिए यह किस प्रकार की वस्तु है। अजीब बात यह है कि मैं एक NSCFArray पाया मैं करने के लिए संदेश भेजने कोई समस्या नहीं है:

(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 

इसलिए मुझे लगता है कि वस्तु मैं जांच कर रहा था ... या कुछ और के साथ एक समस्या थी।

आपकी मदद के लिए धन्यवाद!