2010-06-29 16 views
15

मैंने वीएस 2008 में .NET 2.0 के लिए लक्षित एक विंडोज सेवा बनाई है। मैं इसे डीबग करने के लिए इसे कंसोल ऐप के रूप में चलाता हूं।विजुअल स्टूडियो - डीबग बनाम रिलीज

कंसोल ऐप बहुत अच्छा काम कर रहा है। मैंने इसे अपने स्थानीय कंप्यूटर पर एक सेवा के रूप में रखा, डीबग मोड में संकलित, अभी भी बहुत अच्छा काम कर रहा है। मैं अब रिलीज करने के लिए तैयार हूं, और अचानक, जब मैं इसे रिलीज मोड में सेट करता हूं, तो सेवा संकलित और इंस्टॉल हो जाती है, लेकिन कुछ भी नहीं होता है। (सेवा में कोई कोड बिल्कुल चल रहा है)।

मुझे एहसास है कि रिलीज बनाम डीबग मोड संपत्ति कॉन्फ़िगरेशन सेटिंग्स हैं, लेकिन ऐसा लगता है कि रिलीज मोड में, जब भी मैं डेब्यूजी निरंतर परिभाषित करता हूं, ऑप्टिमाइज़ कोड को अनचेक करता हूं, और डीबग जानकारी को 'पूर्ण' पर सेट करता हूं, यह अभी भी कर रहा है कुछ भी तो नहीं।

इसे डीबग करने के लिए वापस सेट करें और यह फिर से एक आकर्षण की तरह काम कर रहा है।

    :

    तो मेरे सवालों का (महत्व के क्रम में) इन कर रहे हैं (एक sidenote के रूप में, मैं 3.5 लक्ष्य ढांचे को रीसेट यकीन है कि इस मुद्दे को भी नहीं था की कोशिश की)

  1. किसी भी तरह से किसी भी समस्या का कारण बनने के लिए मेरे "डीबग" संस्करण का उपयोग करेगा?

  2. डीबग और रिलीज के बीच कौन सी सेटिंग्स अलग-अलग हैं और तीनों के अलावा मैं पहले से ही बदलने की कोशिश कर रहा हूं?

  3. यह मेरे लिए एक अजीब त्रुटि की तरह लगता है और मेरी जिज्ञासा को उकसाया है। कोई विचार क्या इसका कारण होगा?

संपादित करें: उल्लेख करना चाहिए, मैं पहले से ही एक कस्टम इंस्टॉलर का उपयोग कर रहा हूं। असल में मैं प्रोग्राम संकलित करता हूं (या तो डीबग या रिलीज में) और उसके बाद इसे संबंधित इंस्टॉलर के साथ स्थापित करें।

+0

क्या आप वाकई रिलीज मोड में सेवा स्थापित कर रहे हैं (और सही ढंग से, उस पर)? –

+0

आपको अपनी विंडोज सेवा के लिए एक इंस्टॉलर और कस्टम एक्शन की आवश्यकता है। यहां अधिक जानकारी: http://msdn.microsoft.com/en-us/library/d56de412(VS.80).aspx –

+0

क्या सेवा रनिंग स्थिति में प्रवेश करती है? EventLog में कुछ भी? –

उत्तर

17

1) यह धीमा नहीं है, तो अप्रत्यक्ष रूप से अनुप्रयोग को धीमा कर और इसे और अधिक स्मृति का उपयोग करके अप्रत्यक्ष रूप से।

2) जब यह डिबग मोड में चलाता है, वहाँ कुछ चीजें हैं जो अलग ढंग से काम करता है, उदाहरण के लिए कर रहे हैं:

  • कोड, कुछ अतिरिक्त एनओपी निर्देश के साथ संकलित किया गया है, ताकि वहां पर कम से कम एक अनुदेश है प्रत्येक कोड लाइन की शुरुआत, ताकि किसी भी लाइन पर ब्रेक पॉइंट रखना संभव हो।

  • निर्देशों को रिहाई मोड में पुन: व्यवस्थित किया जा सकता है, लेकिन डीबग मोड में नहीं, ताकि कोड एकल चरणबद्ध हो और परिणाम स्रोत कोड के सटीक क्रम के अनुरूप होगा।

  • कचरा कलेक्टर अलग-अलग काम करता है, संदर्भों को उनके पूरे दायरे में केवल जीवित रहने के बजाय जीवित रहने के लिए अलग-अलग काम करता है, ताकि चरम सीमा समाप्त होने से पहले बिना किसी चर के मोड को डीबग मोड में देखा जा सके।

  • अपवादों में अधिक जानकारी होती है और फेंकने पर प्रक्रिया करने में बहुत अधिक समय लगता है।

ये सभी अंतर अपेक्षाकृत छोटे हैं, लेकिन वे वास्तविक अंतर हैं और वे कुछ मामलों में महत्वपूर्ण हो सकते हैं।

यदि आप डीबग मोड और रिलीज मोड के बीच प्रदर्शन में एक बड़ा अंतर देखते हैं, तो आमतौर पर ऐसा होता है क्योंकि कोड में कुछ गड़बड़ है, उदाहरण के लिए यदि यह बड़ी संख्या में अपवाद फेंक रहा है और पकड़ रहा है। यदि कोड में दौड़ की स्थिति है, तो यह केवल रिलीज़ मोड में हो सकता है क्योंकि डीबग मोड में कुछ अतिरिक्त ओवरहेड है जो कोड को थोड़ा धीमा कर देता है।

3) आपकी सेवा के साथ क्या समस्या है, मुझे नहीं पता, लेकिन यह डीबग मोड या रिलीज़ मोड में कोड को निष्पादित करने के तरीके से संबंधित प्रतीत नहीं होता है। कोड किसी भी मामले में शुरू होगा, और यदि यह कोड के साथ कोई समस्या थी, तो यह क्रैश हो जाएगा और आप इसे ईवेंट लॉग में देख पाएंगे।

+0

धन्यवाद, ऐसा लगता है कि यह बेकार ढंग से काम करता है और मैं बस आगे बढ़ गया और इस तरह से तैनात किया। मैं अभी भी उलझन में हूं कि क्या हो रहा है, लेकिन हाँ, यह कोड नहीं है। एक बार फिर धन्यवाद। :) – Brandi

0

मुझे यकीन नहीं है कि मैं # 1 या # 2 से बात कर सकता हूं, लेकिन जब मुझे ऐसी समस्याएं थीं, तो यह गलत थ्रेडिंग/समरूपता की वजह से थी। मुझे यकीन नहीं है कि आपका ऐप कितना बड़ा है, लेकिन यह शुरू करने के लिए एक अच्छी जगह हो सकती है।

+0

चाड, जबकि यह हमेशा संभव है कि वे ओपी के वैध मुद्दे हैं, मुझे नहीं लगता कि यह संभावना है कि वे समस्या हैं; यह ** ** ** कॉन्फ़िगरेशन/इंस्टॉल समस्या होने की अधिक संभावना है –

+0

यह बहुत छोटा है, मूल रूप से एक टाइमर जो इसके अपडेट पर एक फ़ंक्शन को कॉल करता है। मुझे यकीन है कि थ्रेड सुरक्षा ऐसा नहीं है जब रिलीज मोड काम नहीं करता है, यह कन्स्ट्रक्टर को भी नहीं चलाता है, जबकि डीबग सेटिंग्स के साथ इसे संकलित करते समय दोषपूर्ण ढंग से काम करता है। हालांकि, आम तौर पर धन्यवाद, धन्यवाद। :) – Brandi

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