एक्सकोड डिबगर में एनएसबर्ड चर की सामग्री को कैसे देखें?


85

क्या Xcode डिबगर के माध्यम से एक एनएसडीआर चर की कुंजी / मूल्य जोड़े को देखने का एक तरीका है? यहाँ जानकारी की सीमा है जब यह पूरी तरह से चर खिड़की में विस्तारित है:

Variable  Value      Summary
jsonDict  0x45c540   4 key/value pairs
 NSObject {...}
  isa     0xa06e0720

मैं इसे शब्दकोश के प्रत्येक तत्व (एक सरणी चर के समान) को दिखाने की उम्मीद कर रहा था।

जवाबों:


140

Gdb विंडो में आप poऑब्जेक्ट का निरीक्षण करने के लिए उपयोग कर सकते हैं ।

दिया हुआ:

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];

वस्तुओं को जोड़ने के बाद एक ब्रेकपॉइंट सेट करना आप यह निरीक्षण कर सकते हैं कि शब्दकोश में क्या है

(gdb) po dict
{
  bar = foo;
  buz = fiz;
}

बेशक ये ऐसी NSStringवस्तुएं हैं जो अच्छी तरह से प्रिंट करती हैं। अन्य जटिल वस्तुओं के साथ YMMV।


7
नमस्ते! Gdb क्या है? पो क्या है? समझ में नहीं आ रहा है ... आपकी मदद के लिए धन्यवाद! :)
मार्टिन

1
ठीक है, तो मुझे पता चला कि GDB GNU डिबगर के लिए है और वास्तव में Xcode की डिबगर विंडो है। अब मुझे खोजने की जरूरत है कि क्या है
मार्टिन

18
ठीक है! तो जीडीबी वास्तव में कंसोल में एक संकेत है, जहां आप कमांड का इनपुट कर सकते हैं। "Po object_name" टाइप करके आपको कंसोल में छपी हुई वस्तु सामग्री मिल गई।
मार्टिन

7
पो प्रिंट-ऑब्जेक्ट के लिए एक उपनाम है
ब्रैड कपिट

आश्चर्यजनक! PHP में "इको var_dump ()" या "print_r ()" के बराबर।
दोपहर 12:00

30

आप किसी भी ऑब्जेक्ट (ObjC या Core Foundation) चर पर राइट-क्लिक कर सकते हैं और "Print Description to Console" (रन-> वेरिएबल्स व्यू में भी) का चयन करें। यह परिणाम को ओब्जेक्ट के -debugDescriptionतरीके से प्रिंट करता है , जो कि डिफ़ॉल्ट कॉल के द्वारा होता है -description। दुर्भाग्य से, NSDictionaryयह ओवरराइड करता है आंतरिक डेटा का एक गुच्छा बनाने के लिए जिसे आप आमतौर पर परवाह नहीं करते हैं, इसलिए इस विशिष्ट मामले में क्रेगब का समाधान बेहतर है।

प्रदर्शित कुंजी और मान भी उपयोग करते हैं -description, इसलिए यदि आप अपनी वस्तुओं के बारे में संग्रह और अन्य जगहों पर उपयोगी जानकारी चाहते हैं , तो ओवरराइडिंग -descriptionएक जरूरी है। मैं आम तौर पर इन लाइनों के साथ इसे लागू करता हूं, डिफ़ॉल्ट NSObjectकार्यान्वयन के प्रारूप से मेल खाने के लिए :

- (एनएसएसट्रिंग *) विवरण
{
    वापसी [NSString stringWithFormat: @ "<% @% p> {foo:% @}", [स्व वर्ग], स्व, [आत्म फू]];
}

6

आप CFShow () का उपयोग कर सकते हैं

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
CFShow(dict);

आउटपुट में आप देखेंगे

{
  bar = foo;
  buz = fiz;
}

3

XCode 4.6 ने निम्न कार्यक्षमता जोड़ी है जो आपके लिए सहायक हो सकती है

The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger

अब आप कंसोल में संपूर्ण ऑब्जेक्ट को प्रिंट किए बिना इन ऑब्जेक्ट प्रकारों का निरीक्षण कर सकते हैं। का आनंद लें!

स्रोत: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_6.html


यह मेरे लिए छोटी गाड़ी है - केवल मेरे NS सहारे का हिस्सा दिखाता है
पॉल स्लोकुम

1

अपने हुक पर क्लिक करें, फिर छोटे "मैं" आइकन पर क्लिक करें, यह काम करना चाहिए :-) Xcode5, एक तानाशाह का मूल्य देखें


1

यदि आप आधुनिक XCode (हां, मैं मूल पोस्ट के 10 साल बाद हूं!) में एक ब्रेकपॉइंट एक्शन में इन्हें प्रिंट करना चाहते हैं! तो "लॉग मैसेज" एक्शन में निम्नलिखित ब्रेकपॉइंट अभिव्यक्ति का उपयोग करें:

@ MyDictionary.description @

नीचे मेरी ब्रेकपॉइंट कार्रवाई का एक स्क्रीनशॉट है जहां चर घटना एक NSString है और चर प्रसंगData एनएसएडर है कि मैं सामग्री को लॉग कर रहा हूं :


0

आप NSLog का भी उपयोग कर सकते हैं ।

इसके अलावा आप डिबग क्षेत्र या एक्सकोड में जा सकते हैं, फिर पता All Variables, Registers, Globals and Staticsकरें कि आपका चर चुनें। इस पर राइट क्लिक करें। फिर सेलेक्ट करेंPrint description of "...."

आशा करता हूँ की ये काम करेगा!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.