में डीबग सामान के साथ गड़बड़ी से बचें जब मैं कुछ लिखता हूं, आधा प्रयास स्पष्ट और संक्षिप्त डीबग आउटपुट जोड़ने में 0 गुना प्रयास करता है, या कार्यक्षमता जिसे कुछ डिबगिंग की आवश्यकता होती है उसे सक्षम/अक्षम किया जा सकता है।कोड
डिबग कार्यक्षमता का एक उदाहरण एक डाउनलोडर वर्ग जहां मैं एक #define जो इसे "नाटक" फाइल डाउनलोड करने के लिए और बस मुझे वापस एक मैं पहले से ही है हाथ में आता है पर बारी कर सकते हैं। इस तरह से मैं यह देखने के लिए परीक्षण कर सकता हूं कि जब उपयोगकर्ता किसी फ़ाइल को डाउनलोड करता है, तो नेटवर्क को भौतिक रूप से फ़ाइल को हर बार पकड़ने के लिए इंतजार किए बिना क्या होता है। यह करने के लिए बहुत अच्छी कार्यक्षमता है, लेकिन कोड #ifdefs के साथ गड़बड़ हो जाता है।
मैं अंत में की तरह
// #define DEBUG_FOOMODULE_FOO
// #define DEBUG_BARMODULE_THINGAMAJIG
// ...
जो सामान मैं को देखने के लिए चाहते हैं के लिए uncommented हैं #define
एस के एक समूह के साथ खत्म। कोड स्वयं
- (void)something
{
#ifdef DEBUG_FOOMODULE_FOO
DebugLog(@"something [x = %@]", x);
#endif
// ...
#ifdef DEBUG_FOOMODULE_MOO
// etc
}
यह कोड लिखने/बनाए रखने के लिए बहुत अच्छा काम करता है, लेकिन यह कोड की उपस्थिति के लिए कुछ भी नहीं करता है।
लोग कैसे लंबे समय तक लंबी अवधि के डीबग "सामान" को आसानी से लिखते हैं?
नोट: मैं केवल एनएसएलॉगिंग के बारे में बात नहीं कर रहा हूं ... मैं उपरोक्त डाउनलोड-डाउनलोड जैसी चीजों के बारे में भी बात कर रहा हूं।
उत्सुक: क्या रिलीज निर्माण में 'एनएसएलओजी' बयान छोड़ने में कोई समस्या है? क्या यह प्रदर्शन को नुकसान पहुंचाता है, डिवाइस लॉग भरता है, या अन्यथा अवांछनीय परिणाम प्रदान करता है? –
ऐप्पल का उल्लेख है कि इसे जारी करते समय आपको अपने कोड से NSLog प्रविष्टियों को हटा देना चाहिए, इसलिए मुझे लगता है कि यह करता है, हां। (मुझे वास्तव में यह नहीं मिल रहा है, लेकिन मैं लगभग निश्चित हूं कि मैंने इसे डेवलपर.पple.com पर कहीं पढ़ा है जब मैंने कोडिंग शुरू की थी।) – Kalle
मुझे विश्वास है कि मुझे कहीं भी पढ़ना याद है। शायद एक बुरा विचार नहीं है। शायद ऐप का अगला संस्करण मैं मैक्रो और खोज/प्रतिस्थापन जोड़ूंगा। –