मैं ब्रेकपॉइंट्स के साथ डिबगिंग कर रहा हूं और मुझे एस्टर कॉल का एहसास है? मुझे लगा कि यह केवल यूनिट परीक्षणों के लिए था। यह ब्रेकपॉइंट से अधिक क्या करता है? चूंकि मैं ब्रेकपॉइंट कर सकता हूं, इसलिए मुझे एस्टर का उपयोग क्यों करना चाहिए?
मैं ब्रेकपॉइंट्स के साथ डिबगिंग कर रहा हूं और मुझे एस्टर कॉल का एहसास है? मुझे लगा कि यह केवल यूनिट परीक्षणों के लिए था। यह ब्रेकपॉइंट से अधिक क्या करता है? चूंकि मैं ब्रेकपॉइंट कर सकता हूं, इसलिए मुझे एस्टर का उपयोग क्यों करना चाहिए?
जवाबों:
डिबग संकलन में, Assert
एक बूलियन स्थिति में एक पैरामीटर के रूप में लेता है, और स्थिति गलत होने पर त्रुटि संवाद दिखाता है। यदि स्थिति सही है तो कार्यक्रम बिना किसी रुकावट के आगे बढ़ता है।
यदि आप रिलीज़ में संकलित करते हैं, तो सभी Debug.Assert
स्वतः ही बाहर हो जाते हैं।
Debug.Assert
रिलीज़ मोड में क्यों चाहेंगे ?
से कोड पूरा
8 रक्षात्मक प्रोग्रामिंग
Sert.२ जोर
एक ऐसा कोड है जो विकास के दौरान उपयोग किया जाता है- आमतौर पर एक रूटीन या मैक्रो- जो किसी प्रोग्राम को चलाने के साथ ही उसे चेक करने की अनुमति देता है। जब एक दावा सही है, तो इसका मतलब है कि सब कुछ उम्मीद के मुताबिक चल रहा है। जब यह गलत है, इसका मतलब है कि यह कोड में एक अप्रत्याशित त्रुटि का पता चला है। उदाहरण के लिए, यदि सिस्टम मानता है कि ग्राहक-सूचना फ़ाइल में कभी भी 50,000 से अधिक रिकॉर्ड नहीं होंगे, तो प्रोग्राम में यह दावा किया जा सकता है कि रिकॉर्ड की संख्या 50,000 से कम या उसके बराबर है। जब तक रिकॉर्ड की संख्या 50,000 से कम या उसके बराबर है, तब तक दावा चुप हो जाएगा। यदि यह 50,000 से अधिक रिकॉर्ड का सामना करता है, तो, यह जोर से "जोर" देगा कि कार्यक्रम में कोई त्रुटि है।
बड़े, जटिल कार्यक्रमों और उच्च-विश्वसनीयता कार्यक्रमों में दावे विशेष रूप से उपयोगी होते हैं। वे प्रोग्रामर को और अधिक तेज़ी से बेमेल इंटरफ़ेस मान्यताओं को हटाने में सक्षम करते हैं, त्रुटियाँ जो कोड को संशोधित करते समय रेंगती हैं, और इसी तरह।
आम तौर पर एक तर्क में दो तर्क होते हैं: एक बूलियन अभिव्यक्ति जो उस धारणा का वर्णन करती है जो कि सच है और यह प्रदर्शित करने के लिए संदेश है कि नहीं है।
(...)
आम तौर पर, आप उपयोगकर्ताओं को उत्पादन कोड में संदेश देखना नहीं चाहते हैं; मुख्य रूप से विकास और रखरखाव के दौरान उपयोग के लिए दावे हैं। आम तौर पर विकास के समय में कोड को संकलित किया जाता है और उत्पादन के लिए कोड से बाहर संकलित किया जाता है। विकास के दौरान, विरोधाभासी धारणाओं, अप्रत्याशित स्थितियों, खराब मूल्यों को दिनचर्या में पारित किया जाता है, और इसी तरह से जोर दिया जाता है। उत्पादन के दौरान, उन्हें कोड से बाहर संकलित किया जाता है ताकि दावे प्रणाली के प्रदर्शन को ख़राब न करें।
आपको इसे ऐसे समय के लिए उपयोग करना चाहिए जब आप चर की जाँच करने के लिए कोड की हर छोटी लाइन को तोड़ना नहीं चाहते हैं, लेकिन आप कुछ प्रकार की प्रतिक्रिया प्राप्त करना चाहते हैं यदि कुछ परिस्थितियाँ मौजूद हैं, उदाहरण के लिए:
Debug.Assert(someObject != null, "someObject is null! this could totally be a bug!");
System.Diagnostics
Assert भी आपको Microsoft के UI डिज़ाइन कौशल पर चकल्लस करने का एक और अवसर प्रदान करता है। मेरा मतलब है: तीन बटन एबोर्ट, रिट्री, इग्नोर के साथ एक संवाद, और टाइटल बार में उनकी व्याख्या कैसे करें!
मुखर आपको अपने कोड में एक शर्त (पद या पूर्व) लागू करने की अनुमति देता है। यह आपके इरादों का दस्तावेजीकरण करने का एक तरीका है और यदि आपका इरादा पूरा नहीं हुआ है, तो एक संवाद के साथ आपको सूचित करें।
ब्रेकपॉइंट के विपरीत, एस्टर आपके कोड के साथ जाता है और इसका उपयोग आपके इरादे के बारे में अतिरिक्त विवरण जोड़ने के लिए किया जा सकता है।
सबसे पहले Assert()
विधि Trace
और Debug
कक्षाओं के लिए उपलब्ध है ।
Debug.Assert()
केवल डिबग मोड में निष्पादित हो रहा है।
Trace.Assert()
डिबग और रिलीज़ मोड में चल रहा है।
यहाँ एक उदाहरण है:
int i = 1 + 3;
// Debug.Assert method in Debug mode fails, since i == 4
Debug.Assert(i == 3);
Debug.WriteLine(i == 3, "i is equal to 3");
// Trace.Assert method in Release mode is not failing.
Trace.Assert(i == 4);
Trace.WriteLine(i == 4, "i is equla to 4");
Console.WriteLine("Press a key to continue...");
Console.ReadLine();
इस कोड को डिबग मोड और फिर रिलीज़ मोड में चलाएँ।
आप देखेंगे कि डिबग मोड के दौरान आपका कोड Debug.Assert
स्टेटमेंट विफल हो जाता है, आपको एक संदेश बॉक्स मिलता है जिसमें एप्लिकेशन के वर्तमान स्टैक ट्रेस दिखाए जाते हैं। यह रिलीज मोड में नहीं हो रहा है क्योंकि Trace.Assert()
हालत सच है (i == 4)
।
WriteLine()
विधि बस आपको दृश्य स्टूडियो आउटपुट में जानकारी लॉग करने का एक विकल्प देता है।
अभिकथन में अनुबंध (DbC) द्वारा डिजाइन में भारी सुविधा होती है, जैसा कि मैं समझता हूं कि मेयर, बर्टैंड द्वारा परिचय / समर्थन किया गया था। 1997. ऑब्जेक्ट-ओरिएंटेड सॉफ्टवेयर निर्देश।
एक महत्वपूर्ण विशेषता यह है कि उन्हें साइड-इफेक्ट्स का उत्पादन नहीं करना चाहिए, उदाहरण के लिए आप एक अपवाद को संभाल सकते हैं या यदि एक स्टेटमेंट (रक्षात्मक प्रोग्रामिंग) के साथ कार्रवाई का एक अलग कोर्स कर सकते हैं।
अनुबंध की पूर्व / पोस्ट की स्थिति की जांच करने के लिए उपयोग किया जाता है, ग्राहक / आपूर्तिकर्ता संबंध - ग्राहक को यह सुनिश्चित करना चाहिए कि आपूर्तिकर्ता की पूर्व-शर्तें उदाहरण के लिए मिलें। £ 5 भेजता है और आपूर्तिकर्ता को यह सुनिश्चित करना चाहिए कि पोस्ट की शर्तें पूरी हों। 12 गुलाब बचाता है। (ग्राहक / आपूर्तिकर्ता की बस सरल व्याख्या - कम स्वीकार कर सकते हैं और अधिक वितरित कर सकते हैं, लेकिन जोर के बारे में)। C # भी Trace.Assert () का परिचय देता है, जिसका उपयोग रिलीज़ कोड के लिए किया जा सकता है।
प्रश्न का उत्तर देने के लिए हाँ वे अभी भी उपयोगी हैं, लेकिन कोड के लिए जटिलता और पठनीयता जोड़ सकते हैं और बनाए रखने के लिए समय + मुश्किल से। क्या हमें अभी भी उनका उपयोग करना चाहिए? हाँ, क्या हम सब उनका उपयोग करेंगे? शायद या नहीं, मेयर का वर्णन किस हद तक है।
(यहां तक कि OU जावा कोर्स कि मैंने इस तकनीक को केवल सरल उदाहरणों से सीखा है और बाकी कोड में अधिकांश कोड पर DbC अभिकथन नियमों को लागू नहीं किया गया है, लेकिन प्रोग्राम की शुद्धता को सुनिश्चित करने के लिए इसका उपयोग किया गया था!)
जिस तरह से मुझे लगता है कि यह डीबग है। एसेर एक अनुबंध स्थापित करने का एक तरीका है कि कैसे एक विधि को बुलाया जाना चाहिए, एक पैरामीटर के मूल्यों के बारे में बारीकियों पर ध्यान केंद्रित करना (केवल प्रकार के बजाय)। उदाहरण के लिए, यदि आप दूसरे पैरामीटर में एक अशक्त भेजने के लिए नहीं हैं, तो आप उस पैरामीटर के आस-पास जोड़कर उपभोक्ता को ऐसा न करने के लिए कहें।
यह किसी को अपने कोड का उपयोग करने से रोकता है। लेकिन यह यह भी अनुमति देता है कि हड्डी का रास्ता उत्पादन के माध्यम से जाना और ग्राहक को बुरा संदेश न दें (यह मानते हुए कि आप एक रिलीज का निर्माण करें)।