2009-08-06 5 views
12

मुझे लगता है कि मैं रिलीज और डीबग बिल्ड मोड के बीच अंतर को समझता हूं। मुख्य अंतर यह है कि डीबग मोड में, निष्पादित योग्य निष्पादन योग्य नहीं है (क्योंकि यह डीबगिंग को कठिन बना सकता है) और डीबग प्रतीकों को शामिल किया गया है।बिल्ड मोड: RelWithDebInfo

पीसीआरई बनाने के दौरान, WinMerge के लिए बाहरी निर्भरताओं में से एक, मैंने एक बिल्ड मोड देखा जो मैंने पहले नहीं देखा था: RelWithDebInfo।

डीबग और रिलीविथडेबइन्फो के बीच का अंतर यहां उल्लिखित है: http://www.cmake.org/pipermail/cmake/2001-October/002479.html। अंश: "RelwithDebInfo रिलीज मोड के समान है। यह पूरी तरह से अनुकूलित कोड उत्पन्न करता है, लेकिन प्रोग्राम डेटाबेस भी बनाता है, और डीबगर को डीबग लाइन जानकारी डालने के लिए एक अच्छा मौका देने के लिए एक अच्छा मौका देता है जहां आप किसी भी समय कोड में हैं। "

यह वास्तव में एक अच्छा विचार की तरह लगता है, हालांकि यह आवश्यक नहीं है कि कैसे सेट अप किया जाए। यह लिंक वर्णन करता है कि वीसी ++: http://www.cygnus-software.com/papers/release_debugging.html

क्या मुझे कुछ याद आ रही है, या क्या रिलाइथडेबइन्फो के रूप में सभी रिलीज कोड को संकलित करने के लिए यह समझ में नहीं आता है?

उत्तर

4

Am मैं कुछ याद आ रही है, या यह नहीं मेकअप भावना RelWithDebInfo के रूप में सभी रिलीज कोड संकलित करने के लिए करता है?

यह इस बात पर निर्भर करता है कि आप डीबगिंग जानकारी के साथ अपने ग्राहक पर कितना भरोसा करते हैं।

अतिरिक्त जानकारी:

जीसीसी वस्तु कोड में डिबगिंग जानकारी एन्कोड करता है। ,

How to generate gcc debug symbol outside the build target?

ध्यान दें कि cmake बॉक्स से बाहर इस दृष्टिकोण का समर्थन करने के प्रकट नहीं होता है:

यहाँ जीसीसी के लिए pdb बराबर है।

+1

आपको अपने ग्राहकों को डीबग जानकारी नहीं भेजनी है (ओह, जब तक आपने उल्लेख नहीं किया है, प्लेटफ़ॉर्म के लिए जहां यह बाइनरी में एम्बेड किया गया है) –

+0

डिबग जानकारी _b extra_ निष्पादन योग्य (जैसे वीसी) डालने के साथ, यह नहीं है एक मुद्दा। – sbi

+1

मैं क्रॉस प्लेटफ़ॉर्म विकास करता हूं। मुझे उम्मीद है कि दृश्य सी ++ लोग अन्य प्लेटफॉर्म पर लक्ष्य के परिणामों को समझते हैं। मैं भी cmake उपयोगकर्ताओं को cmake मेलिंग सूची का उपयोग करने की सलाह देता हूं, क्योंकि मुझे उनके लिखित दस्तावेज़ अधूरे पाते हैं। – Juan

12

जहां तक ​​मेरा संबंध है, घर में संग्रहीत संबंधित डीबग प्रतीकों के बिना ग्राहकों को शिपिंग कोड बालों के झड़ने के लिए एक नुस्खा है जब उत्पादन समस्याओं को डीबग करने की बात आती है।

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

उसने कहा, मुझे नहीं पता कि कोई कमी है या नहीं। अगर ऐसा है तो सुनना दिलचस्प होगा।

+0

जीसीसी (4.8?) अनुकूलित बिल्ड के लिए बेहतर डीबग जानकारी के लिए समर्थन जोड़ रहा है, इसलिए यह सलाह केवल अधिक प्रासंगिक हो जाएगी। [Gcc दस्तावेज़ीकरण] में http://fcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options) -फवर-ट्रैकिंग और -फवर-ट्रैकिंग-असाइनमेंट देखें। संक्षेप में, डीबग जानकारी अब स्मृति और रजिस्टरों के बीच डेटा की गति को ट्रैक कर सकती है, और एक विशिष्ट निर्देश सूचक दिया जाता है, यह पता लगा सकता है कि किसी दिए गए चर को कहां देखना है। – doug65536

2

उत्पादन कोड को उस आकार के ब्लोट की आवश्यकता नहीं होती है जो डीबगिंग जानकारी करता है।

+0

क्या डीबग जानकारी अभी भी निष्पादन योग्य में पदचिह्न छोड़ देती है? मैंने सोचा कि पीडीबी ने सभी जानकारी ली है ... –

+1

लिनक्स पर, जानकारी आपके बाइनरी और साझा पुस्तकालयों में ऑब्जेक्ट कोड में निहित है। – Juan

5

एक बार जब आप एक अनुकूलित रिलीज बिल्ड डीबग करने का प्रयास कर चुके हैं, तो आप जानते हैं कि यह ऐसा क्यों है जो आप केवल तब करना चाहते हैं जब कोई दूसरा रास्ता न हो।

असल में, मैं दो मामलों देखते हैं जब आप इस की आवश्यकता होगी:

  • आप एक समस्या यह है कि डिबग में प्रकट नहीं होता बनाता है, तो आप एक रिलीज निर्माण
  • आप एक है डिबग करने के लिए है किसी ग्राहक पर क्रैश करें और क्रैश को समझने के लिए स्थानीय रूप से संग्रहीत डीबग जानकारी का उपयोग करें।

मुझे आपके बारे में पता नहीं है, लेकिन मुझे पिछले दशक में रिलीज कोड दो बार या तीन बार डीबग करना पड़ा और उन कंपनियों पर काम करना पड़ा जहां ग्राहक के दुर्घटनाओं में कोई समस्या नहीं थी।

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

+1

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

+2

किम, मैं शायद ही कभी दुर्घटनाओं को देखता हूं। मुझे लगता है कि यह कोडिंग शैली के लिए नीचे आता है। एक बड़ी परियोजना में मैं लंबे समय तक काम करता था (वर्षों), वहां ऐसे हिस्सों थे जहां दुर्घटनाएं जहां अन्य हिस्सों की तुलना में अधिक आम थीं और वहां ऐसे हिस्सों थे जहां परीक्षण के दौरान पाए गए दुर्घटनाएं कुछ थीं जो पांच साल में केवल एक बार होती थीं। दुर्घटनाओं की संभावना स्पष्ट रूप से मैन्युअल संसाधन प्रबंधन की मात्रा से सहसंबंधित है। – sbi

+0

जबकि आपका उत्तर 200 9 में लिखा गया था, मेरे पास वर्तमान में मेरे डेस्कटॉप पर वीएस 2008 है और वास्तव में, डिफ़ॉल्ट रूप से (यानी विज़ार्ड के साथ परियोजनाएं बनाना), रिलीज में पीडीबी उत्पन्न करता है (Win32 और कंसोल अनुप्रयोग दोनों)। – paercebal

0

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

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