2012-06-28 10 views
28

मुझे एक सी ++ प्रोजेक्ट डीबग करना है, लेकिन एक निर्भरता डीबग मोड में संकलित नहीं होती है और मैं अब तक इस समस्या को ठीक करने में सक्षम नहीं हूं, मैं प्रोजेक्ट को रिलीज़ मोड में डीबग करने का प्रयास करना चाहता हूं।रिलीज मोड में डीबग कैसे करें?

वर्तमान में एप्लिकेशन एक शून्य सूचक के कारण क्रैश हो जाता है, लेकिन मेरे पास कोड नहीं है जो त्रुटि उत्पन्न कर रहा है। ब्रेक पॉइंट्स को रिलीज-मोड में स्पष्ट रूप से अनदेखा कर दिया जाता है, इसलिए मैं जानना चाहता हूं कि त्रुटि खोजने का सबसे अच्छा तरीका क्या है।

उत्तर

52

वीएस में, अपनी परियोजना पर राइट क्लिक करें, "गुण" चुना है।

  1. सी/सी ++ नोड पर क्लिक करें। डी 7 संगत (/ Z7) या प्रोग्राम डेटाबेस (/ Zi) में डीबग सूचना प्रारूप सेट करें।

  2. लिंकर का विस्तार करें और सामान्य नोड पर क्लिक करें। संख्या में वृद्धिशील लिंकिंग सक्षम करें (/ संगत: नहीं)।

  3. डीबगिंग नोड का चयन करें। डीबग जानकारी जेस (/ डीईबीयूजी) उत्पन्न करें सेट करें।

  4. अनुकूलन नोड का चयन करें। हाँ (/ ओपीटी: आरईएफ) के संदर्भ सेट करें।

    यदि/ओपीटी: आरईएफ निर्दिष्ट है,/ओपीटी: आईसीएफ डिफ़ॉल्ट रूप से चालू है।

माइक्रोसॉफ्ट के प्रलेखन से सीधे फट रहा है यही कारण है कि:

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

इसके अलावा, मैं एक प्रोजेक्ट पर काम करता हूं जो छवि प्रसंस्करण का एक टन उपयोग करता है और बड़ी छवियों का बहुत अधिक संपीड़न/डिकंप्रेशन करता है। धीमी डीबग बिल्ड का उपयोग करना अव्यवहारिक है।

+0

धन्यवाद समस्या हल हो!मुझे इन सभी सेटिंग्स के प्रभावों के बारे में बहुत कुछ पता नहीं है, इसलिए वास्तविक रिलीज संस्करण की शिकायत करते समय उन्हें केवल डीबगिंग के लिए उपयोग करना और उन्हें फिर से निकालना बेहतर है? – Pedro

+5

@ पेड्रो: हां, शायद उन्हें वापस करने के लिए सबसे अच्छा है और रिलीज ऑन के लिए डिफ़ॉल्ट मान छोड़ दें। मैं आमतौर पर इस कॉन्फ़िगरेशन के लिए एक नया निर्माण प्रकार बनाता हूं, यानी, "w/प्रतीकों को छोड़ दें"। उस ने कहा, यह अध्ययन करने के लिए चोट नहीं पहुंचा सकता कि वास्तव में उन स्विच क्या करते हैं। –

4

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

अनुकूलन के साथ रिलीज में सी ++ प्रोजेक्ट को संकलित करते समय, डीबगर कभी-कभी सही ऑब्जेक्ट जानकारी नहीं दिखाता है।

स्थानीय चर आमतौर पर जाने वाले पहले होते हैं, और कई बार, इस ऑब्जेक्ट की जानकारी डीबगर को खो जाती है।

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

मैं एक तरह से सुझाव दिया है कृपया गुम जानकारी प्राप्त करने के:

Debugging Release Projects in C++ - Finding the Lost Object Information

+0

@Ed का उत्तर अच्छा है यदि आपके पास कोड और आईडीई तक पहुंच है। योचई का जवाब पढ़ने लायक है। –