रिलीज कॉन्फ़िगरेशन में एमएस विजुअल स्टूडियो 2005 में कोड क्रैश

मेरे पास 31 बार के लिए एक लूप में H.263 वीडियो एन्कोडर चलाने के लिए वर्कस्पेस है यानी मुख्य 31 एन्कोडेड बिट स्ट्रीम उत्पन्न करने के लिए 31 बार निष्पादित किया जाता है। यह एमएस विजुअल स्टूडियो 2005 वर्कस्पेस में सभी सी स्रोत फाइलें हैं। जब मैं वर्कस्पेस के लिए "DEBUG" कॉन्फ़िगरेशन बनाता हूं और इसे बनाता हूं और निष्पादित करता हूं, तो यह ठीक चलता है, यानी यह सभी 31 आउटपुट फ़ाइलों को अपेक्षित रूप से उत्पन्न करता है। लेकिन जब मैं वर्कस्पेस की कॉन्फ़िगरेशन को "रिलीज" एमडीओ में सेट करता हूं, और प्रक्रिया दोहराता हूं, तो कुछ टेस्ट केस रन पर एन्कोडर क्रैश हो जाता है।

अब डीबग करने के लिए यह सत्यापित है:

  1. यह देखने के लिए कोड का विश्लेषण किया गया कि एन्कोडर के प्रत्येक भाग में कोई वैरिएबल प्रारंभिकता याद आ रही है
  2. दोनों मोड (डेबग और रिलीज) में विभिन्न वर्कस्पेस (समाधान) विकल्पों की जांच की गई।

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

लेकिन अभी भी समस्या को नाखुश नहीं कर सका और इसके लिए एक फिक्स ढूंढ सकता है। कोई संकेतक?

-Ajit।

0
ro fr bn

7 उत्तर

क्या आप निश्चित रूप से रिलीज मोड में कुछ वास्तव में महत्वपूर्ण कोड को अनदेखा करते हैं, लेकिन डीबग में उन्हें अनुमति देता है, क्या कोई प्रीकंपाइल निर्देश नहीं हैं?

साथ ही, क्या आपने कोई लॉगिंग लागू की है जो त्रुटि को फेंकने वाली सटीक असेंबली को इंगित कर सकती है?

0
जोड़ा

हाँ, उन बेस्टर्ड दुर्घटनाओं को ठीक करने के लिए सबसे कठिन हैं। सौभाग्य से, कुछ कदम हैं जो आप कर सकते हैं जो आपको कोड को मैन्युअल रूप से देखने का प्रयास करने से पहले सुराग देगा और सुई ढूंढने की उम्मीद है।

यह कब दुर्घटनाग्रस्त हो जाता है? हर परीक्षण में? एक विशिष्ट परीक्षण में? वह परीक्षण क्या करता है कि दूसरों को नहीं?

त्रुटि क्या है? यदि यह एक प्रवेश उल्लंघन है, तो यह कहां होता है कि यह कहां होता है? यदि पते कम हैं, तो इसका मतलब यह हो सकता है कि कहीं भी एक अनियंत्रित सूचक है।

क्या प्रोग्राम डीबग कॉन्फ़िगरेशन के साथ क्रैश हो रहा है लेकिन डीबगर संलग्न किए बिना? यदि ऐसा है, तो जॉन स्मिथर्स ने बताया कि यह थ्रेड सिंक्रनाइज़ेशन समस्या की सबसे अधिक संभावना है।

क्या आपने पुरीफाई जैसे विश्लेषक के माध्यम से कोड चलाने की कोशिश की है? यह धीमा है लेकिन यह आमतौर पर प्रतीक्षा के लायक है।

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

क्या आप इंटेल आर्किटेक्चर पर हैं? यदि नहीं, तो स्मृति संरेखण त्रुटियों के लिए देखें, वे कुछ आर्किटेक्चर पर चेतावनी के बिना कठिन क्रैश करते हैं और उन कोडेक एल्गोरिदम उन परिस्थितियों को बहुत अधिक बनाते हैं क्योंकि वे अत्यधिक अनुकूलित होते हैं।

0
जोड़ा

क्या आप रिलीज बिल्ड में डिबग प्रतीकों को जोड़ सकते हैं और इसे डीबगर में चला सकते हैं यह देखने के लिए कि यह कहां और क्यों दुर्घटनाग्रस्त हो गया है?

0
जोड़ा

दिलचस्प समस्या .. क्या आप सुनिश्चित हैं कि आपके पास कोई सशर्त संकलन कोड नहीं है जो रिलीज मोड में संकलित नहीं किया जा रहा है? अर्थात:

#if (DEBUG)
// Debug Code here
#else
// Release Code here
#endif

केवल एक चीज है जो मैं वास्तव में सोच सकता हूं .. इस तरह कुछ भी अनुभव नहीं किया ..

0
जोड़ा

मैं अधिक विस्तार से दुर्घटना को देखता हूं - यदि यह एक परीक्षण मामले में दुर्घटनाग्रस्त हो रहा है, तो यह आमतौर पर बहुत आसानी से प्रतिलिपि बनाता है, जो आमतौर पर चुनौती का सबसे अधिक होता है।

0
जोड़ा

यह कहना मुश्किल है कि समस्या का सावधानीपूर्वक निरीक्षण किए बिना समस्या क्या हो सकती है। तथापि...

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

एक और चीज उन सभी चेतावनियों को सक्षम करने के लिए हो सकती है जो आप संभवतः कर सकते हैं, और उन्हें ठीक कर सकते हैं।

0
जोड़ा

दो धागे की एक समवर्ती समस्या हो सकती है। DEBUG कॉन्फ़िगरेशन निष्पादन को धीमा कर देता है, इसलिए समस्या उत्पन्न नहीं होती है। लेकिन, केवल एक अनुमान है।

0
जोड़ा