2013-04-05 5 views
9

में ब्लॉक के साथ प्रभावी ढंग से डीबग कैसे कर सकता हूं मैं वास्तव में हमारे बड़े आईओएस प्रोजेक्ट पर डीबगिंग कोड के साथ संघर्ष कर रहा हूं। ऐसा लगता है जैसे हर कोई ब्लॉक डालने और हर जगह कतार भेजने के लिए पागल हो गया है।एक्सकोड

जब मुझे कोड का एक हिस्सा डीबग करने के लिए कहा जाता है, तो मैं वास्तव में इसके माध्यम से कदम उठाना चाहता हूं और देख सकता हूं कि चीजें कैसे बदलती हैं, और देखें कि चर के साथ वास्तव में क्या हो रहा है। मैं वास्तव में सभी ब्लॉक कि दो कारणों के लिए में डाल दिया है के साथ आसानी से ऐसा नहीं कर सकते:

  1. मैं हर छोटे से खंड के भीतर एक ब्रेकपाइंट डाल करने के लिए है कि ब्लॉक में बंद करने के लिए किया है।

  2. एक ब्लॉक के भीतर, ब्लॉक के बिना चर उपयोग योग्य फैशन में प्रदर्शित नहीं होते हैं, और पीओ कमांड के साथ आसानी से कंसोल पर नहीं जा सकते हैं।

क्या ब्लॉक के साथ चलने वाले कोड के माध्यम से कदम/मूल्यांकन करने का कोई आसान या बेहतर तरीका है? या मुझसे यहां कुछ छूट रहा है?

उत्तर

3

क्या आप स्वचालित रूप से कंसोल डंप के साथ ब्रेकपॉइंट का उपयोग करते हैं (आपके चल रहे ऐप को रोक दिए बिना)?

उत्कृष्ट, लेकिन वास्तव में उपयोग करने योग्य ट्यूटोरियल about intermediate debugging से बहुत दूर है।

हैप्पी कोडिंग!

+1

मुझे यकीन नहीं है कि "स्वचालित रूप से कंसोल डंप के साथ ब्रेकपॉइंट" का क्या मतलब है। इसके अलावा, ट्यूटोरियल मेरे लिए बहुत उपयोगी था। – HalR

+0

ठीक है, आप ब्रेकपॉइंट के लिए बहुत सी व्यावहारिक कार्रवाई कर सकते हैं (यहां तक ​​कि एक ध्वनि संदेश :)। इनमें से एक एनएसएलओजी के समान वाक्यविन्यास वाला एक लॉग संदेश है। और यह स्वचालित रूप से संबंधित लॉग संदेश मुद्रित करेगा। – ingaham

1

ब्लॉक में आवश्यक चर आउटपुट करने के लिए NSLog() का उपयोग क्यों नहीं करें?

+0

मैं अपने कोड में NSLog() जोड़ सकता हूं, और यह एक तरीका है जिस पर मैंने चीजों को देखा है, लेकिन फिर मैं कोड बेस बदल रहा हूं, और जब भी मैं हमेशा स्रोत नियंत्रण के साथ दोबारा जांच कर सकता हूं, मैं अभी भी अनजाने में किसी और के कोड में कुछ जोड़ सकते हैं। मैं अन्य विकल्पों की उम्मीद कर रहा था। – HalR

1

आप कंसोल में वस्तु प्रिंट कर सकते हैं, इस का उपयोग करते हुए:

उदाहरण:

po object.name 
po object.age 

एक और तरीका है: कोड पर एक ब्रेकपाइंट रखो। जब यह उस बिंदु पर निष्पादन रोकता है, तो उस पर होवर करें।

अधिक स्पष्ट विवरण के लिए, इस प्रश्न के लिए मेरा उत्तर को देखो: How to inspect elements from NSArray and NSDictionary in xcode?

1

आप ठीक कह रहे हैं, यह थोड़ा डिबग ब्लॉक करने के लिए बोझिल है। मैंने "ऑटो-डंप-ब्रेकपॉइंट्स" का उपयोग करने की कोशिश की लेकिन यह पता चला कि वे बनाए रखने के लिए भयानक हैं ...

मैं मूल रूप से NSLog का उपयोग कर समाप्त हुआ। लेकिन NSLog() के साथ समस्या यह है कि आप अपने रिलीज निर्माण में लॉग इन करने वाले सभी को नहीं चाहते हैं। इसलिए मैं की तरह एक उपकरण का उपयोग करने की सिफारिश करेंगे:

MWLogging

मुझे लगता है कि यह वास्तव में बहुत अच्छा है। आप इस बारे में पढ़ सकते हैं और इस ब्लॉग पोस्ट में सामान्य रूप में प्रवेश करने कर सकते हैं:

iOS Development: You're Doing It Wrong

यह वास्तव में पढ़ने लायक है।

+0

या CocoaLumberjack का उपयोग :) – AndrewShmig