2011-11-09 11 views
14

आज xCode 4 में नई सुविधाओं के बारे में एक डब्ल्यूडब्ल्यूडीसी वीडियो देख रहे थे। उन्होंने उल्लेख किया है कि ब्रेकपॉइंट्स पर लॉग संदेश क्रियाओं का उपयोग करना एक अच्छा विचार है, साथ ही "मूल्यांकन क्रियाओं के बाद स्वचालित रूप से जारी रखें" के उपयोग के बजाय एक चर के मूल्य को आउटपुट करने के लिए सक्षम किया गया है NSLogs हर समय।एक्सकोड में ब्रेकपॉइंट की लॉग संदेश कार्रवाई कैसे बनाएं?

कहते हैं कि मैं ऐसा ही कुछ है करने देता है:

NSLog(@"URL is : %@", userDocumentsURL); 

मैं userDocumentsURL के मूल्य प्रदर्शित करने के लिए एक लॉग संदेश कार्रवाई कैसे लिख होगा? क्या एनएसएलओजी की बजाय उपर्युक्त विधि का उपयोग करना वाकई अच्छा विचार है?

उत्तर

25

ब्रेकपॉइंट 'लॉग संदेश' एक्शन बनाएं।

URL is @(char*) [[userDocumentsURL description] UTF8String]@ 

वैकल्पिक रूप से आप एक ब्रेकपाइंट के समान 'डीबगर आदेश' कार्रवाई बना सकते हैं:: लॉग संदेश के लिए की तरह कुछ में शामिल हैं

po [NSString stringWithFormat:@"URL is: %@", userDocumentsURL] 

मैं प्रवेश के लिए ब्रेकप्वाइंट कार्यों का उपयोग पसंद करते हैं, के रूप में यह यकीनन स्पष्ट करने के लिए आसान है एनएसएलओजी को हटाने के लिए ब्रेकपॉइंट्स का एक गुच्छा बाहर निकालना है। इस फैशन में ब्रेकपॉइंट्स का उपयोग करने का एक संभावित नकारात्मक पक्ष यह है कि वे सीधे एनएसएलओजी की तुलना में काफी धीमे (डीबगिंग के दौरान) हैं।

+4

याद करने के लिए मैं मुझे पता था कि इच्छा क्यों एक: डिबगर के रूप में की आवश्यकता होती है तो बेवकूफ है char * cast, और b: यह आधा समय काम नहीं करता है और सी: सेब प्रलेखन यह स्पष्ट नहीं करता है कि आपको char * और d की आवश्यकता है: यदि यह डीबग करने में आपकी सहायता के लिए चर मौजूद नहीं है तो यह शिकायत क्यों नहीं करता है। जावा के लिए एक्लिप्स ब्रेकपॉइंट्स की तुलना करें, जिसमें यह सुविधा भी न हो, इसलिए बहुत गरीब होना चाहिए, लेकिन आपको एक शर्त में प्रिंट डालकर इसे हैक करने की अनुमति देता है। यह ग्रहण से परेशान है लेकिन फिर भी बहुत आसान है क्योंकि प्रिंट को कोई विशेष कास्टिंग की आवश्यकता नहीं है और यह आपको रोक देगा और त्रुटियों के बारे में आपको बताएगा – Rhubarb

-3

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

+4

मुझे विश्वास है कि यदि आप ब्रेकपॉइंट संपादक में सही शेयर विकल्प चुनते हैं तो ऐसा होता है। मैं इस सुविधा का उपयोग स्वयं (एकल डेवलपर) नहीं करता, लेकिन डब्ल्यूडब्ल्यूडीसी वार्ता इंगित करती है कि साझाकरण स्रोत नियंत्रण के साथ एकीकृत करता है। – mbm29414

+12

मेरी राय में अन्य टीम के सदस्यों के सभी डीबग आउटपुट को पढ़ने के लिए मजबूर नहीं होना चाहिए एक समर्थक है। काम करने से पहले आपको एनएसएलओजी (या एनएसएलओजी से पहले // को साफ करने की ज़रूरत नहीं है)। मैंने एक टीम पर काम किया जहां 10 में से 1 काम "लॉगिंग हटा दिया गया" था, "एनएसएलओजी ने जोड़ा", "एनएसएलओजी को कम/कम वर्बोज़" या लॉगिंग से संबंधित कुछ भी बदल दिया। –

+0

@MatthiasBauch की तरह ही टिप्पणी की गई यह भी उपयोगी हो सकती है।और दूसरी तरफ, आपको पता होना चाहिए कि कुछ उपयोगकेस हैं जहां आप ऐप को पुनरारंभ नहीं करना चाहते हैं लेकिन डीबगर में लॉग देखना चाहते हैं, इसलिए यह करने की एकमात्र संभावना होगी। –

19

NSLog का उपयोग कर एक समान समाधान है, जो अन्य समाधानों की तुलना में कम वर्ण हो सकता है।

debugger command using NSlog

हालांकि, जब तक कि आप को जोड़ने के void इस तरह:

po (void)NSLog(@"the person name is: %@", p.name) 

आप "शून्य" अपनी लॉग के साथ बाहर मुद्रित एक कष्टप्रद मिल जाएगा। उदाहरण के लिए:

(lldb) po NSLog(@"foo") 
nil 
2013-06-19 14:42:59.025 TheMove[95864:c07] foo 

(lldb) po (void)NSLog(@"foo") 
2013-06-19 14:43:10.758 TheMove[95864:c07] foo 

आप नहीं के बराबर के साथ रह सकते हैं (मैं कर सकते हैं) यह टाइप करने के लिए तेज है और आसान बस po

संबंधित मुद्दे