2012-10-18 9 views
20

चलाता है मेरे पास यह कोड मेरे सी # वर्ग में है।जब #if DEBUG

#if DEBUG 
     private const string BASE_URL = "http://www.a.com/"; 
#else 
     private const string BASE_URL = "http://www.b.com//"; 
#endif 

क्या मैं पूछना चाहते जब करता कोड में

#if DEBUG 

पथ निष्पादित हो रहा है?

यह

  1. निष्पादित हो करता है जब मैं दृश्य स्टूडियो में एक डिबग सत्र चलाने के?
  2. जब मैं मैन्युअल रूप से डीबग फ़ोल्डर से प्रश्न में exe या dll चलाता हूं?
  3. कोई अन्य परिस्थिति जो मैं उल्लेख करना भूल गया?
+2

'#if DEBUG' कभी नहीं चलता है लेकिन कोड संकलन को प्रभावित करता है। –

उत्तर

31

#if DEBUG यह एक पूर्वप्रक्रमक परिभाषा है के लिए मैन्युअल रूप से सेट कर सकते हैं संकलन कर रहे हैं डिफ़ॉल्ट सेट कर रहा है।

जब आप DEBUG निरंतर परिभाषित करते हैं तो यह संकलित होता है। और हाँ, यह डीबग बिल्ड कॉन्फ़िगरेशन पर डिफ़ॉल्ट है।

दृश्य स्टूडियो 2010 प्रोजेक्ट गुण: Visual Studio 2010 Project Properties

तो Define DEBUG constant चेक किया गया है वी.एस. संकलन होगा:

private const string BASE_URL = "http://www.a.com/"; 

वरना (चयनित नहीं) वी.एस. संकलन होगा:

private const string BASE_URL = "http://www.b.com//"; 
+0

उत्कृष्ट जवाब। यह अभी भी वीएस2017 में मामला है। – robnick

12

यह एक प्रीप्रोसेसर निर्देश है। जब आप डीबग बिल्ड करते हैं तो DEBUG भाग में कोड संकलित किया जाता है (अधिक विशेष रूप से जब DEBUG निरंतर परिभाषित किया जाता है)। अर्थात। यदि आप डीबग बिल्ड करते हैं तो BASE_URL www.a.com पर इंगित करेगा। अन्यथा यह www.b.com को इंगित करेगा।

7

जब आप DEBUG निर्देश के साथ संकलित करते हैं। इसलिए यदि यह सेट किया गया है तो केवल पहली पंक्ति संकलित बाइनरी का हिस्सा होगी और यदि यह सेट नहीं है तो दूसरी पंक्ति द्विआधारी का हिस्सा होगी।

डीबग जब आप वी.एस. में डिबग विन्यास लेकिन आप इसे किसी भी विन्यास

2

हैं आप DEBUG कॉन्फ़िगरेशन के साथ संकलित कर रहे हैं, अन्य लिन से पहले कोड ई संकलित हो जाएगा जबकि दूसरा नहीं होगा। यदि आप किसी अन्य कॉन्फ़िगरेशन में संकलित करते हैं, तो दूसरी पंक्ति संकलित की जाएगी जबकि पहले नहीं होगा।

+0

वीएस में परियोजनाओं के डिफ़ॉल्ट सेटअप में सच है हालांकि वीएस का उपयोग नहीं कर रहा है या सेटअप को बदलने में _any_ कॉन्फ़िगरेशन में डेब्यूजी प्रतीक शामिल हो सकता है (यदि आप चाहें तो रिलीज सहित) –

+0

@RuneFS अच्छा बिंदु, धन्यवाद। –

3

यह एक "कंपाइलर निर्देश" है, जिसका अर्थ है कि यह वास्तव में # यदि आपके द्वारा डाले गए # पर आधारित प्रक्रिया प्रक्रिया (या संकलन) से कोड को शामिल या बहिष्कृत करेगा। ऐसा कहा जा रहा है कि DEBUG प्रतीक में है आपकी परियोजना के गुण, और विजुअल स्टूडियो में आमतौर पर "रिलीज" निर्माण पर स्वचालित रूप से हटा दिया जाता है।

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

1

वीएस 2017 वास्तव में सक्रिय कॉन्फ़िगरेशन को समझता है और उदाहरण के लिए रिलीज कॉन्फ़िगरेशन चयनित होने पर डीबग स्थिति ग्रेग आउट करेगा।

enter image description here

0

जाओ करने के लिए "प्रोजेक्ट गुण" -> आवेदन की टैब बनाएँ। यदि कॉन्फ़िगरेशन: सक्रिय (डीबग) तो डीबग कॉन्फ़िगरेशन सक्षम है। कोड के नीचे कंसोल पर प्रिंट होगा।

#if DEBUG 
    Console.WriteLine("in debug mode..."); 
#endif 

विन्यास हैं: सक्रिय (रिलीज) तो रिलीज विन्यास enabled.Below कोड कंसोल के लिए प्रिंट होगा है।

#if RELEASE 
    Console.WriteLine("in release mode..."); 
#endif 

आप डीबग और रिलीज मोड के बीच स्विच करने के लिए "डीबग/रिलीज/विन्यास प्रबंधक" उपयोग करना चाहते हैं सही उपकरण Menu.Apologies तहत ड्रॉप डाउन के रूप में डेवलपर के सबसे यह पता है ... लेकिन कभी कभी अनदेखी की है और भ्रम का कारण बनता है क्यों ऊपर कोड सही ढंग से नहीं चल रहा है।

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