.NET में संभावित डुप्लिकेट विज़ुअल स्टूडियो रिलीज़ संभव
दृश्य स्टूडियो में डीबग और रिलीज़ के बीच अंतर क्या है?
.NET में संभावित डुप्लिकेट विज़ुअल स्टूडियो रिलीज़ संभव
दृश्य स्टूडियो में डीबग और रिलीज़ के बीच अंतर क्या है?
जवाबों:
सबसे महत्वपूर्ण बात यह है कि डिबग मोड में कोई अनुकूलन नहीं हैं, जबकि रिलीज़ मोड में अनुकूलन हैं। यह महत्वपूर्ण है क्योंकि कंपाइलर बहुत उन्नत है और आपके कोड के कुछ सुंदर कम-स्तरीय सुधार कर सकता है। परिणामस्वरूप आपके कोड की कुछ पंक्तियाँ बिना किसी निर्देश के छोड़ दी जा सकती हैं, या कुछ सभी मिश्रित हो सकती हैं। चरण-दर-चरण डिबगिंग असंभव होगा। इसके अलावा, स्थानीय चर अक्सर रहस्यमय तरीके से अनुकूलित होते हैं, इसलिए घड़ियाँ और क्विकचैच अक्सर काम नहीं करते क्योंकि चर "अनुकूलित दूर" होता है। और अन्य अनुकूलन के भी कई दृष्टिकोण हैं। कुछ समय के लिए अनुकूलित .NET कोड डिबगिंग का प्रयास करें और आप देखेंगे।
एक और महत्वपूर्ण अंतर यह है कि इसकी वजह से डिफ़ॉल्ट रिलीज़ सेटिंग्स व्यापक डिबग प्रतीक सूचना उत्पन्न करने से परेशान नहीं होती हैं। यह .PDB फाइल है जिस पर आपने गौर किया होगा और यह डिबगर को यह पता लगाने की अनुमति देता है कि कौन सी विधानसभा निर्देश को कोड के किस दिशा में ले जाती है, आदि।
"डीबग" और "रिलीज़" वास्तव में सेटिंग्स के एक पूरे स्लेव के लिए सिर्फ दो लेबल हैं जो आपके निर्माण और डिबगिंग को प्रभावित कर सकते हैं।
"डीबग" मोड में आपके पास आमतौर पर निम्नलिखित हैं:
"रिलीज़" मोड में ऑप्टिमाइज़ेशन चालू हैं (हालांकि कई विकल्प उपलब्ध हैं) और _DEBUG प्रीप्रोसेसर परिभाषा परिभाषित नहीं है। आमतौर पर आप अभी भी पीडीबी फ़ाइलों को उत्पन्न करना चाहते हैं, क्योंकि यह रिलीज़ मोड में "डीबग" करने में सक्षम होने के लिए अत्यधिक उपयोगी है जब चीजें तेजी से चल रही हैं।
डिबगिंग करते समय अधिकतर, डीबग में बहुत सी अतिरिक्त जानकारी उपयोगी होती है। रिलीज़ मोड में, यह सभी कट और प्रदर्शन के लिए कारोबार किया जाता है।
यदि आप प्रोजेक्ट संकलन विकल्पों में जाते हैं और उनकी तुलना करते हैं, तो आप देखेंगे कि अंतर क्या हैं।
मान लिया जाए कि सवाल देशी / सी ++ कोड के बारे में है (यह पूरी तरह से स्पष्ट नहीं है)
मूल रूप से, डीबग में सभी कोड जनरेशन ऑप्टिमाइज़ेशन बंद हैं। कुछ पुस्तकालयों (जैसे एसटीएल ) को डिफ़ॉल्ट त्रुटि जाँच करने के लिए डिफ़ॉल्ट (उदाहरण डीबग पुनरावृत्तियों)। अधिक डिबगिंग जानकारी उत्पन्न होती है (उदाहरण के लिए "संपादित करें और जारी रखें")। त्रुटियों को पकड़ने के लिए कोड में अधिक चीजें उत्पन्न की जाती हैं (स्थानीय चर मान एक असिंचित पैटर्न पर सेट होते हैं, और डीबग हीप का उपयोग किया जाता है)।
इसके अलावा, जाहिर तौर पर, डिबग मोड डिबगिंग में मदद करने के लिए बहुत सारे अतिरिक्त धागे बनाता है। ये प्रक्रिया के जीवन भर सक्रिय रहते हैं, भले ही आप डिबगर संलग्न करें या नहीं। मेरा संबंधित प्रश्न यहां देखें ।
यह संभवतः बहुत स्पष्ट रूप से ध्यान देने योग्य है, कि झंडे का निर्माण विभिन्न तर्क के लिए अनुमति देता है जिसका उपयोग केवल लॉगिंग और "कंसोल" मैसेजिंग को बदलने के लिए किया जाना चाहिए , लेकिन इसका दुरुपयोग किया जा सकता है और नाटकीय रूप से न केवल निम्न-स्तर, बल्कि वास्तविक व्यापार तर्क को बदल सकता है।
यह भी ध्यान दें कि उदाहरण के लिए MFC का उपयोग करते समय , गैर-पुनर्वितरण DLL संस्करणों के विरुद्ध डीबग प्रोजेक्ट लिंक लिंक MFC90D.DLL
जारी करते समय , जैसे redistributable संस्करणों के विरुद्ध लिंक बनाता है MFC90.DLL
। यह संभवतः अन्य रूपरेखाओं के समान है।
इसलिए आप संभवतः गैर-विकास मशीनों पर डिबग-बिल्ड एप्लिकेशन चलाने में सक्षम नहीं होंगे।
मुझे इस प्रश्न पर भी उत्सुकता हुई जब मैंने एक मौजूदा रिलीज़ बिल्ड कॉन्फ़िगरेशन से कॉपी किए गए एप्लिकेशन को विकसित किया था।
मेरे पास एक डेवलपर है जो डिबग मोड में उस एप्लिकेशन का उपयोग करने में दिलचस्प है, इसलिए मैंने सोचा कि इस बिल्ड कॉन्फ़िगरेशन को बनाने के लिए क्या होगा, जो रिलीज़ रिलीज़ के नाम से रिलीज़मायबिल्ड के नाम के साथ मौजूद है (और इस तरह अनुकूलन को जारी करने के लिए सभी सेटिंग्स होनी चाहिए। ) अचानक टीमों को बदलने और भ्रामक बिल्ड कॉन्फ़िगरेशन नाम के बावजूद डिबग बिल्ड बनने के लिए।
मुझे लगा कि परियोजना विन्यास सिर्फ एक नाम और "सेटिंग्स के पूरे स्लीव" का चयन करने का एक सुविधाजनक तरीका है, जोरिस टिम्मरमैन उल्लेख। मैं तो बस क्या उन सेटिंग्स है कि मेकअप निर्माण विन्यास एक अनुकूलित के रूप में "foo" समारोह नामित किया जा सकता है की बुनियादी तथ्य जानना चाहता था रिहाई का निर्माण।
इसकी एक झलक यहां देखें। मैंने विजुअल स्टूडियो 2010 से खाली प्रोजेक्ट टेम्पलेट से एक नया VCXPROJ बनाया। मैंने तब इसे कॉपी किया और दोनों को संपादित किया, पहला डिबग कंटेंट और दूसरा रिलीज कंटेंट। यहां देखें प्रासंगिक अंतरों पर केंद्रित ...
विज्ञप्ति
<PropertyGroup>
<WholeProgramOptimization>true</WholeProgramOptimization>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
डीबग
<PropertyGroup>
<UseDebugLibraries>true</UseDebugLibraries>`
<ClCompile>
<Optimization>Disabled</Optimization>
यह दिलचस्प है कि लिंक अनुभाग में वे दोनों GenerateDebugInformation
सच करने के लिए सेट हैं।
आप जो स्पष्ट अंतर देख सकते हैं, वह बाइनरी का आकार है। एक डीबग बिल्ड रिलीज़ बिल्ड की तुलना में एक बड़ा बाइनरी बनाता है।
डीबग में संकलित करते समय, प्रतीक तालिका को कोड फ़ाइल के संकलित ऑब्जेक्ट में जोड़ा जाता है जो डिबगिंग प्रोग्राम को इन बायनेरिज़ में टैप करने और ऑब्जेक्ट और वेरिएबल्स के मूल्यों तक पहुंचने की अनुमति देता है।
एक और अवलोकन अंतर यह है कि, रिलीज़ मोड में, बाइनरी डीबग मोड में रहते हुए एक घातक त्रुटि पर क्रैश हो जाएगा, यदि आप Visual Studio में एप्लिकेशन डीबग करना शुरू करते हैं, तो आप कॉल स्टैक की जांच कर सकते हैं जो आपको गलत बयान का सही स्थान बताता है। ।
मुझे नहीं पता कि सटीक अंतर क्या हैं क्योंकि वास्तव में उस पर आसानी से कोई जानकारी उपलब्ध नहीं है।
लेकिन मुख्य रूप से मनाया गया अंतर यह है कि रिलीज़ संस्करण कभी-कभी परिणामी DLL फ़ाइल को दूषित कर देता है और इस प्रकार आपको एप्लिकेशन, वेब एप्लिकेशन को अनुपयोगी बना देता है।
दुख की बात है कि आपको डिबग बिल्ड को प्रोडक्शन में लगाना होगा। और हाँ, प्रकाशित करने के लिए आपको अच्छे पुराने FTP का उपयोग करना होगा।