Tuesday, 15 September 2015

c# - How could the existence of pseudo debug strings cause a difference in functionality? -


यदि मेरे पास मेरे कोड में यह छिद्र है:

  MessageBox.Show ("एक देखें प्रारूप अपवाद अभी तक? # 1 "); // todo: remove   

(इनमें से 7 हैं, 1.7 से गिने गए, जिनमें से अधिकतर प्रदर्शन (1,2,5, 6,7))

मैं एक त्रुटि संदेश (" अपवाद: तालिका 0 स्थान: frmfunction.SetPlatypus ") नहीं मिल सकता है के साथ समाप्त होता है)

अगर मैं उन सभी को बाहर कीजिए, मैं एक अलग त्रुटि संदेश (" अपवाद: प्रारूपएक्सप्शन स्थान frmFunction.getDuckbillRecord ") के साथ समाप्त होता है)

यह कैसे हो सकता है? इस तरह की जानकारी का अस्तित्व / प्रदर्शन नहीं होना चाहिए msg का कोड जिस तरीके से लेता है / जिस रास्ते पर ले जाता है, उस पर कोई असर नहीं होता है आदि।

नोट: getDuckbillRecord () है, जहां सभी संदेशबॉक्स हैं

UPDATE

प्रेरणा के रूप में आरटी के सुझावों का उपयोग करके, मैं इस के साथ आया:

  सार्वजनिक स्थिर स्ट्रिंगबइल्डर LogMsgs = new StringBuilder (); सार्वजनिक स्थिर शून्य ExceptionHandler (अपवाद पूर्व, स्ट्रिंग स्थान) {try {LogMsgs.Append (string.Format ("{0} \ r \ n", ex.Message)); // TODO: तैनात करने से पहले टिप्पणी करें? दिनांक समय डीटी = दिनांक समय.अब; स्ट्रिंग टाइमएएसएसटीआर = स्ट्रिंग। फ़ॉर्मेट ("{0} _ {1} _ {2} _ {3} .txt", dt.Hour, dt.Minute, dt.Second, dt.Millisecond); (StreamWriter फ़ाइल = नया स्ट्रीमर (समयएएसएसटीआर)) का उपयोग करना {file.WriteLine (LogMsgs.ToString ()); } । । // समस्याग्रस्त कोड में, MessageBox.Show () कॉल की जगह: TTBT.LogMsgs.Append ("इसे frmOverFunction.GetDuckbillRecord () \ r \ n") में स्थान 1 में बनाया गया;   

... और यह मदद करता है - अपवाद 7 "कोड वेपॉइंट्स" के ठीक बाद में पहुंच गया है, इसलिए जाहिरा तौर पर डेनमार्क में कुछ ख़राब है। < एच 2> अपडेट 2

एप को चलाने में सक्षम होने के दुर्लभ अनुभव के बाद कहीं भी, मुझे एहसास हुआ कि मुझे उस मुख्य फाइल के ऑन-क्लोजिंग () ईवेंट में फ़ाइल-लेखन कोड की भी आवश्यकता है - वैश्विक अपवाद हेन्डलर थोड़ी देर के लिए काम किया था - मुझे लगता है कि ऐप का एक साफ समापन होने की उम्मीद नहीं थी, फिर भी मुझे लगता है।

मैं दृढ़ता से प्रोत्साहित करता हूं नहीं का उपयोग करने के लिए MessageBox.Show (...) लॉग / ट्रेस / डीबग त्रुटियों के लिए, क्योंकि पॉपिंग-अप एक डायलॉग कर सकते हैं विशेष रूप से यदि आपका यूआई प्रवाह / राज्य महत्वपूर्ण है तो कई सूक्ष्म बगों और व्यवहार, फ़ोकस आदि में बदलाव लाएं।

इसके बजाय, ट्रैकिंग कोड लिखने के लिए System.Diagnostics.Trace का उपयोग करें (जिसे आप वैकल्पिक रूप से आपके उत्पादन / रिलीज कोड में संकलित कर सकते हैं) या System.Diagnostic S.Debug डीबग संदेशों को लिखने के लिए जो आपके रिहाई संस्करण को बनाते समय निकाले जाते हैं।

उदाहरण के लिए:

  सार्वजनिक शून्य DoSomething (int a, int b ) {Trace.TraceInformation ("कुछ करना शुरू करना: a = {0}, b = {1}", a, b); {Int c = a / b; } पकड़ (डिवाइडबिज़रीएक्सेप्शन ई) {डिबग। विरसलाइन ("ओ एच नो ... 'बी' वॉरो शून्य हो! रन एवे !!!! '); फेंक ई; } ट्रेसट्रेसइनेमेशन ("कुछ करना हो गया"); }   

ऊपर दिए गए उदाहरण में, डिबग आउटपुट डिबग बिल्ड में उपलब्ध होगा, लेकिन रिलीज़ बिल्ड में हटा दिया जाएगा। ट्रेस आउटपुट डीबग और खुदरा बगों में उपलब्ध होगा (जब तक कि आप ट्रैस बिल्ड पैरामीटर को बंद न करें), लेकिन जब तक आप किसी श्रोता को हुक-अप न करें और कताई डिस्क, टिकर-टेप प्रिंटर जैसे धीमी गति से ट्रेस आउटपुट लिखना शुरू करें , आदि;)

जब आप ट्रेस और / या डीबग के साथ कोड को विजुअल स्टूडियो में डीबग संदेशों के साथ चलाते हैं, तो संदेश आउटपुट फलक में लिखा जाता है ताकि आप देख सकें कि आपके एप के अंदर क्या हो रहा है रन।

यदि आप चाहते हैं, तो आप ट्रेस और / या डीबग संदेशों के लिए सुनते हैं और उन्हें फ़ाइल / डेटाबेस में लॉग ऑन करने या उन्हें एक कंसोल विंडो (या जीयूआई) में प्रदर्शित करने के लिए एक स्टैंड-अलोन ट्रेस श्रोता लिख ​​सकते हैं

आप उपकरण का उपयोग भी कर सकते हैं जैसे कि आप विभिन्न फाइल स्वरूपों, डाटाबेस आदि में लॉग / ट्रेस संदेशों को लिखने में सक्षम बनाता है।

No comments:

Post a Comment