मैं कैसे ( "iPhone सिम्युलेटर के अंदर" @) NSLog के साथ डीबग करूँ?

वोट
55

मैं प्रोग्रामिंग करने के लिए इस्तेमाल कर रहा हूँ और होने लॉग संदेशों उसे देखा नहीं जा। मैं जानता हूँ कि आप का उपयोग करने में सक्षम हो के लिए इस्तेमाल किया NSLog()बाहर संदेशों का पता लगाने के लिए जब कोको अनुप्रयोगों की डीबगिंग। सबसे अच्छा तरीका है जब एक iPhone Xcode विकास के वातावरण में कोडिंग को संदेश का पता लगाने क्या है?

17/02/2009 को 19:26
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


6 जवाब

वोट
5

अपने प्रोजेक्ट में मैं के आधार पर कस्टमाइज़ किए गए उपाय है DebugOutput.m यह आसान है, जहां कि उत्पादन पाठ से आ रही है की पहचान करने, जबकि अभी भी यह संक्षिप्त रखने बनाने यह डिबग आउटपुट के लिए फ़ाइल और लाइन नंबर जोड़ती है।

मैं एक डिबग मुखौटा के साथ मानक समाधान संवर्धित कर दिया है ताकि मैं अपने अनुप्रयोग में कार्यक्षमता की विशेष क्षेत्रों के लिए और बंद पर डिबगिंग बदल सकते हैं। Debug.h में, मेरे पास है

typedef enum {
kDebugMaskAp- = 1,
kDebugMaskXMLParser = 1 << 1,
kDebugMaskNetwork = 1 << 2,
kDebugMaskAnalytics = 1 << 3,
kDebugMaskCache = 1 << 4,
} debugBitMask;

#define debugForComponent(mask,format,...) if( currentDebugMask() & mask) [[DebugOutput sharedDebug]  output:__FILE__ lineNumber:__LINE__ input:(format), ##__VA_ARGS__]

और Debug.m में

-(void)output:(char*)fileName lineNumber:(int)lineNumber input:(NSString*)input, ...
{
  va_list argList;
  NSString *filePath, *formatStr;

  // Build the path string
  filePath = [[NSString alloc] initWithBytes:fileName length:strlen(fileName) encoding:NSUTF8StringEncoding];

  // Process arguments, resulting in a format string
  va_start(argList, input);
  formatStr = [[NSString alloc] initWithFormat:input arguments:argList];
  va_end(argList);

  // Call NSLog, prepending the filename and line number
  NSLog(@"File:%s Line:%d %@",[((DEBUG_SHOW_FULLPATH) ? filePath : [filePath lastPathComponent]) UTF8String], lineNumber, formatStr);

  [filePath release];
  [formatStr release];
}

आवेदन में, कॉल कुछ इस तरह दिखाई:

debugForComponent(kDebugMaskApp,@"Request failed - error %@", [error localizedDescription]);
18/02/2009 को 07:46
का स्रोत उपयोगकर्ता

वोट
213

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

कोड की पंक्ति है जहाँ आप एक printf या NSLog जोड़ने के लिए परीक्षा होगी, एक ब्रेकपाइंट सेट करते हैं तो इसे नियंत्रित क्लिक करें और "ब्रेकप्वाइंट संपादित करें" चुनें। नीला होने वाले बबल में, ब्रेकप्वाइंट क्रिया को खोलने के लिए सही पर + बटन पर क्लिक करें: वैकल्पिक पाठ http://idisk.mac.com/cdespinosa/Public/Breakpoint%20Actions.png

आपकी लॉग पाठ दर्ज करें। कि डीबगर में मुद्रित किया जा सकता किसी भी अभिव्यक्ति जब @ चिह्न द्वारा सीमांकित किया जा सकता है।

ऑब्जेक्टिव-सी डिबगिंग के लिए यह पॉपअप से "डीबगर आदेश" चुनें और 'पो [[वस्तु विधि] विधि]' में प्रवेश के लिए एक ऑब्जेक्टिव-सी वस्तु का वर्णन स्ट्रिंग या एक विधि कॉल का परिणाम मुद्रित करने के लिए आम तौर पर अधिक उपयोगी है।

ऊपरी दाएँ भाग में क्लिक करने के लिए "जारी रखें" चेकबॉक्स इसलिए निष्पादन लॉग के बाद जारी है सुनिश्चित करें।

NSLog और printf पर इस के लाभ:

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

इसके अलावा बोलो बटन की जाँच; यह पूर्ण स्क्रीन क्षुधा जहां डीबग लॉग नहीं देख सकते हैं डीबगिंग के लिए बहुत अच्छा है।

19/02/2009 को 16:55
का स्रोत उपयोगकर्ता

वोट
-2

मैं बस सभी कार्यक्षमता की जगह का उपयोग ....

मैं "के साथ // *** NSLog (@" NSLog की जगह (द्वारा अपने सभी NSLog बयान को निष्क्रिय @

इस तरह मैं बस इसे पा सकते हैं (सभी परियोजना फाइलों में खोज का उपयोग करके) के साथ // *** NSLog (@ "और पुन: सक्षम उन्हें

कुछ भी नहीं फैंसी लेकिन यह काम करता है :)

25/02/2009 को 19:56
का स्रोत उपयोगकर्ता

वोट
9

यहाँ कोड का एक बड़ा सा मैं वेब पर कहीं उठाया है। यह नए कार्यों को परिभाषित करता है DLog () और alog ()। जब अनुप्रयोग एक -DDEBUG ध्वज (डीबग परिभाषित) के साथ संकलित किया गया है DLog संदेश केवल दिखाई देते हैं। Alog संदेशों हमेशा (रिलीज़ मोड में भी) दिखाई देते हैं।

// DLog is almost a drop-in replacement for NSLog
// DLog();
// DLog(@"here");
// DLog(@"value: %d", x);
// Unfortunately this doesn't work DLog(aStringVariable); you have to do this instead DLog(@"%@", aStringVariable);
#ifdef DEBUG
#       define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#       define DLog(...)
#endif

// ALog always displays output regardless of the DEBUG setting
#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
12/03/2010 को 16:21
का स्रोत उपयोगकर्ता

वोट
2

अपने उपसर्ग शीर्षक में पेस्ट करें। परियोजना से सभी लॉग पक्का गायब हो जाएगा।

#ifndef __OPTIMIZE__

#    define NSLog(...) NSLog(__VA_ARGS__)

#else

#    define NSLog(...) {}

#endif
28/04/2011 को 05:58
का स्रोत उपयोगकर्ता

वोट
0

आप इस्तेमाल कर सकते हैं NSLogger जो सिर्फ अपने संदेश लॉग करने की बजाय मेज पर एक बहुत अधिक लाता है। मैं मैक्रो का उपयोग रिहाई बनाता में लॉग अक्षम करना है, जबकि सक्रिय में डिबग बनाता है उनमें से हर एक हो जाता है। लॉग मात्रा एक मुद्दा है, के रूप में NSLogger शक्तिशाली लॉग फ़िल्टर करने के विकल्प प्रदान करता है नहीं है।

01/11/2011 को 07:07
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more