2010-02-05 9 views
7

मैं बस अपना पहला आईफोन ऐप सबमिट करने वाला हूं।क्या एनएसएलओजी कथन के साथ आईफोन ऐप बाइनरी जमा करना ठीक है?

मैंने एप्लिकेशन का परीक्षण और डिबग करने के लिए बहुत सारे NSLog कथन दिए हैं।

तो मेरे सवाल का

"यह स्रोत कोड में NSLog बयान रखने के लिए ठीक है" है और मुझे लगता है कि है कि क्या NSLog बयान कुल निष्पादन समय धीमा या नहीं एक संदेह है।

धन्यवाद।

+1

देखें http://stackoverflow.com/questions/300673/is-it-true-that-one-should-not-use-nslog-on-production-code – Vladimir

उत्तर

9

मैं (इसे कहीं पाया जाता है) यह सब समय का प्रयोग किया:

// DLog is almost a drop-in replacement for NSLog to turn off logging for release build 
// 
// add -DDEBUG to OTHER_CFLAGS in the build user defined settings 
// 
// Usage: 
// 
// 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(__FORMAT__, ...) NSLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) 
#else 
# define DLog(...) do {} while (0) 
#endif 
// ALog always displays output regardless of the DEBUG setting 
#define ALog(__FORMAT__, ...) NSLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) 

three20 परियोजना फेसबुक डिबग या प्रवेश करने के लिए और अधिक जटिल तरीका होता है से।

+0

क्या आप बता सकते हैं कि आपको यह कहां मिला है, इसलिए मैं इसे बेहतर ढंग से समझ सकता हूं – harshalb

+0

मुझे खेद है। मैं भूल गया कि यह कहां है। लेकिन, स्रोत कोड पर्याप्त वर्णनात्मक है। आप इसे गूगल कर सकते हैं। अगर मैं इसे पा सकता हूं, तो आप कर सकते हैं। –

+1

यह इस ब्लॉग से है - http://iphoneincubator.com/blog/debugging/the-evolution-of-a-replacement-for-nslog – deanWombourne

3

मैं AppStore पर तीन क्षुधा NSLogs डाले जाते हैं तो मुझे लगता है कि यह ठीक है ...

2

मैं कभी मेरा :)

कुछ लोगों को सशर्त संकलन/संकलक मैक्रो की सिफारिश से छुटकारा मिला लिया है इसलिए आप बिना किसी NSLog के निर्माण कर सकते हैं लेकिन मुझे लगता है कि बहुत कम इनाम के लिए बहुत अधिक प्रयास है।

हालांकि, एनएसएलओजी ऐप को धीमा कर देते हैं (थोड़ा) ताकि मैं किसी भी व्यक्ति को सीधे प्रदर्शन को प्रभावित कर सकूं। इसके अलावा, आप,

सैम

+0

अच्छा जवाब लेकिन मुझे यकीन नहीं है "मुझे लगता है कि बहुत कम इनाम के लिए बहुत अधिक प्रयास है।" एक बार जब आप इसे एक बार कर लेंगे तो एक बार फिर से लागू करना मुश्किल नहीं होगा (अधिकतर 5 मिनट लगते हैं) जब आप एक नई परियोजना स्थापित करते हैं। मेरे पास व्यक्तिगत रूप से एक डीबग्लॉग परिभाषित किया गया है जिसे रिलीज बिल्ड के लिए सशर्त रूप से संकलित किया गया है, जिससे मुझे एनएसएलओजी वास्तव में महत्वपूर्ण सामग्री के लिए उपयोग करने के लिए छोड़ देता है जिसे मैं लॉग में दिखाना चाहता हूं। – Kevin

+0

एनएसएलॉग की संख्या और सामग्री के आधार पर धीमी गति काफी हो सकती है। यदि आप किसी तालिका में प्रत्येक ऑब्जेक्ट का विवरण लॉग करते हैं तो आपको शायद खराब स्क्रॉल प्रदर्शन दिखाई देगा। – FelixLam

+0

@ केविनब्लैयर - बहुत सच है लेकिन मुझे मैक्रो लिखना होगा और फिर जिस टीम पर मैं हूं, उसे मैक्रो को अपनाने की ज़रूरत होगी - मैं कम से कम प्रतिरोध का मार्ग ले रहा हूं :) (अगर अच्छा था तो यह अच्छा होगा प्रत्येक नई परियोजना में निर्मित एक पूर्व परिभाषित मैक्रो) – deanWombourne

6

कोई एप्लिकेशन मैं Perviously पर काम कर रहा था कई NSLogs डिबग डंपिंग था जानकारी प्रवेश करने को छिपाने के लिए कैसे आप अपने अनुप्रयोग आदि

आशा है कि उपयोगी है को लागू किया है कुछ डिबगिंग निकालना चाहें कंसोल के लिए। हमने पाया कि उन्होंने आईफोन 3 जी पर प्रदर्शन में काफी बाधा डाली। प्रदर्शन हिट 3 जीएस पर ध्यान देने योग्य था, लेकिन उतना ही नहीं।

मेरी सलाह प्रीप्रोसेसर मैक्रो और डीबग प्रीप्रोसेसर परिभाषा का सशर्त रूप से एनएसएलॉग का उपयोग डीबग बिल्ड में करने के लिए होगी, लेकिन रिलीज बिल्ड में नहीं।

1

मैं बस "useDebugMode" सिंगलटन int सेट 0 या 1 पर उपयोग करता हूं जो userPrefs (plist) में संग्रहीत है। और, आईफोन के यूयूआईडी के आधार पर, मैं सेटिंग्स स्क्रीन पर टॉगल करने के लिए "डीबग मोड का उपयोग करें: चालू/बंद करें" ताकि मैं उत्पादन संस्करणों के साथ भविष्य में समस्याओं को डीबग कर सकूं। यदि लोग भविष्य में कार्यक्रम के साथ मुद्दों के बारे में शिकायत करते हैं तो यह मुझे डेटा समस्याओं (डाउनलोड किए गए एक्सएमएल के साथ) डीबग करने की अनुमति देता है। मैं तो

if (useDebugLog == 1) 
{ 
    NSLog(@"debug statement"); 
} 

यह मेरे लिए काम करता ... बेशक में सभी "NSLog" एस और "printf" रों लपेट,:

if (useDebugLog == 1) 

का कारण बनता है कुछ भूमि के ऊपर है कि मैं के लिए तैयार हूँ से निपटें।

0

रिलीज में एनएसएलओजी का उपयोग करने की कोई समस्या नहीं है। लेकिन अगर आप लॉग इन अन्य उपयोगकर्ता (डेवलपर) में कोई मूल्यवान डेटा डालते हैं तो वह डेटा देख सकता है। कुछ डाउनलोड लिंक आदि की तरह ..

2

एक्सकोड 4 इस के लिए एक सुंदर साफ समाधान प्रदान करता है - ब्रेकपॉइंट्स का उपयोग करें। कार्रवाई 'लॉग संदेश' का चयन करें और वैल = @ वैल @ संदेश, के रूप में सेट करें, फिर 'क्रियाओं का मूल्यांकन करने के बाद स्वचालित रूप से जारी रखें' बॉक्स पर निशान लगाएं।

प्रत्येक उपयोग के मामले में फिट नहीं होगा, लेकिन यह आपको मूल्यों की गारंटी 'गारंटी' का लाभ देता है और गारंटी देता है कि वे इसे रिलीज़ नहीं करेंगे।

+0

अच्छा लगता है। धन्यवाद । – harshalb

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