2010-05-18 10 views

उत्तर

22

डिबग मोड में:

#if DEBUG 
      System.Console.WriteLine("Debug version"); 
#endif 
      System.Console.WriteLine("Output"); 

आउटपुट के रूप में

Debug version 
Output 

रिलीज मोड में:

#if DEBUG 
      System.Console.WriteLine("Debug version"); 
#endif 
      System.Console.WriteLine("Output"); 

आउटपुट के रूप में

Output 

पढ़ इस: #if (C# Reference)

उपयोग: आप मानों का एक सेट है, तो डिबग मोड में परीक्षण किया जाना है और रिलीज़ मोड में आप #if DEBUG

5

आपको इसे बिल्कुल उपयोग नहीं करना है। इसका उद्देश्य कोड के अनुभाग होना है जो केवल डीबग मोड में संकलित हो जाते हैं। जैसे आपके पास कुछ कोड हो सकता है जो एक मास्टर उपयोगकर्ता को सक्षम करता है, जो प्रूपोज़ का परीक्षण और डीबग करने के लिए सिस्टम में कोई अन्य उपयोगकर्ता होने का नाटक कर सकता है। आप नहीं चाहते हैं कि उपयोगकर्ता सुरक्षा कारणों से रिलीज कोड में सक्षम हो ताकि आप #if DEBUG में कोड के रिलीव सेक्शन को लपेट सकें और उन्हें रिलीज कोड से बाहर रखा जाएगा।

+2

या बस जब डिबगिंग उपयोग कर सकते हैं, स्प्लैश स्क्रीन नहीं दिखा , एक या दो बचाओ। इस तरह के सामान। – TomTom

+2

@ टॉमटॉम: कैसे, स्पलैश स्क्रीन * कभी * नहीं दिखाएं? – MusiGenesis

5

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

उपयोग के उदाहरण के रूप में: वर्तमान विकास में से एक में हम एक कंपाइलर ध्वज का उपयोग करते हैं, यह बताते हैं कि किसी उपयोगकर्ता में लॉग इन करने के लिए लॉगिन मास्क का उपयोग करना है या फिर वर्तमान प्रिंसिपल के साथ लॉगिन स्वचालित रूप से होना चाहिए या नहीं। दूसरा मोड केवल डेवलपर्स के लिए है उदा। लॉग इन किए बिना जल्दी डीबग करें।

एक और उदाहरण: कुछ मोनो कोड में आप झंडे देखेंगे। इस मामले में कोड को अलग-अलग संकलित किया जा सकता है जब उदा। एक अलग ढांचे को लक्षित करना, क्योंकि यह कक्षाओं का उपयोग करता है जो पहले रिलीज़ में मौजूद नहीं हो सकते हैं।

इससे संबंधित सशर्त -Attribute जिसके साथ आप एक विधि चिह्नित कर सकते हैं। अगर कहा गया ध्वज सेट नहीं है, तो विधि को कॉल नहीं किया जाएगा। विधि अभी भी आईएल में समाप्त होती है, लेकिन कॉल हटा दी जाएगी। कोड निम्न उदाहरण के लिए

की जांच:

var mthods = typeof (Debug).GetMethods().Where(mi => mi.Name.Equals("WriteLine")).ToList(); 
var attribs = mthods[0].GetCustomAttributes(true); 

आप Debug.WriteLine विधि सशर्त विशेषता यह करने के लिए लागू किया है कि ध्यान देंगे: करने के लिए जब आप बिना डीबग संकलक झंडा संकलन निकाल दिया जाएगा कॉल करता है।

17

आप Conditional विशेषता है, जो पूरे तरीकों को बाहर किया जा सकता है के साथ अधिक सहज महसूस कर सकते हैं, फोन करने की ओर सशर्त, साथ स्रोत जटिल की जरूरत के बिना:

[Conditional("DEBUG")] 
void Foo() 
{ 
} 

Foo() सुरक्षित रूप से दोनों में कहा जा सकता है डीबग और रिलीज - हालांकि रिलीज मोड में, यह नो-ऑप होगा।

+0

'नो-ऑप' क्या है? – gingerbreadboy

+7

यह एक विशेष आईएल कमांड है जो अनिवार्य रूप से "कुछ भी नहीं" कहता है। यह विशेष रूप से सहायक होता है जब आप उन जगहों पर ब्रेकपॉइंट डालते हैं जहां कुछ नहीं होता है (उदा। एक खुला ब्रैकेट) - इस तरह डीबगर कोड को सिंक्रनाइज़ कर सकता है और नो-ऑप के लिए आईएल – flq

+1

+1 निष्पादित कर सकता है। खूबसूरती से समझाया गया .. –

3

यह विंडोज़ सेवाओं का परीक्षण करते समय भी आसान है। आप अपनी प्रक्रिया को मैन्युअल रूप से शुरू करने के लिए #if DEBUG में डाल सकते हैं, इसलिए आपको सेवा इंस्टॉल करने और डीबग करने के लिए इसे संलग्न करने की आवश्यकता नहीं है।

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