2011-06-15 18 views
25

मैं अपने रिलीज में डीबग जानकारी शामिल करने का लुत्फ उठाता हूं जो ग्राहकों को जाता है। जहां तक ​​मुझे लगता है कि बाइनरी फ़ाइल आकार में केवल नीचे की तरफ 25% की वृद्धि है। इसका फायदा यह है कि मैं तुरंत उपयोग करने योग्य क्रैश डंप प्राप्त कर सकता हूं, विश्लेषण करना बहुत आसान है। मैं 25% की वृद्धि के साथ रहने के लिए तैयार हूं। क्या कोई अन्य नुकसान है जो मुझे याद आ रही है?विजुअल स्टूडियो: रिलीज में डीबग जानकारी

यह एक सी परियोजना है और सभी मैं करना चाहता हूँ जुड़ा हुआ है/डिबगिंग/जनरेट डीबग जानकारी

उत्तर

35

निष्पादन योग्य का आकार 25% से कम होना चाहिए।

मैं वास्तव में एक छोटे से हैरान हूँ कि यह बहुत बिल्कुल बढ़ जाती हूँ, लेकिन कुछ त्वरित परीक्षण दर्शाते हैं कि कम से कम एक बड़ा उदाहरण परियोजना (ScummVM) 10,996,224 बाइट्स 10,205,184 बाइट्स से .exe बढ़ जाती है बस के लिए /DEBUG विकल्प जोड़कर लिंक चरण (लगभग 8% की वृद्धि)। /DEBUG आईडीई में "Linker | Debugging | Generate Debug Info" विकल्प का उपयोग कर निर्दिष्ट किया गया है। ध्यान दें कि यह सेटिंग्स को कंपाइलर द्वारा जेनरेट किए गए अनुकूलन पर कोई प्रभाव नहीं पड़ता है।

मुझे पता है कि .pdb फ़ाइल के लिए एक पॉइंटर निष्पादन योग्य में रखा गया है, लेकिन इसके लिए बहुत कुछ नहीं है। मैंने थोड़ा प्रयोग किया और पाया कि /OPT:NOREF लिंकर विकल्प को सक्षम करने से आकार अंतर 10,205,184 बनाम 10,205,696 हो गया। इसलिए गैर /DEBUG बिल्ड एक ही आकार में रहा, लेकिन /DEBUG बिल्ड केवल 512 बाइट्स तक गिर गया (जिसे पॉइंटर-टू-पीडीबी द्वारा माना जा सकता है - शायद लिंकर राउंड 512 या कुछ के कुछ हिस्सों में)। 1% से भी कम वृद्धि। जाहिर है, /DEBUG जोड़ने से लिंकर को बिना संदर्भित ऑब्जेक्ट्स रखने का कारण बनता है जब तक आप /OPT:NOREF निर्दिष्ट नहीं करते हैं। (आईडीई में "Linker | Optimization | References" विकल्प)।

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

निश्चित रूप से एक बात यह जानना है कि आपको अपनी रिलीज के साथ .pdb फ़ाइलों को संग्रहित करने की आवश्यकता होगी। "विंडोज़ के लिए डीबगिंग टूल्स" पैकेज (जिसे अब विंडोज एसडीके में वितरित किया जाता है) एक प्रतीक सर्वर उपकरण प्रदान करता है ताकि आप .pdbs को संग्रहित कर सकें और उन्हें डिबगिंग के लिए आसानी से पुनर्प्राप्त कर सकें।

एकमात्र कमी जो मैं .pdb फ़ाइलों को वितरित करने के बारे में सोच सकता हूं वह यह है कि यदि यह आपके लिए चिंता का विषय है, तो यह आपके एप्लिकेशन को रिवर्स इंजीनियरिंग को आसान बना सकता है।ध्यान दें कि माइक्रोसॉफ्ट विंडोज के लिए प्रतीकों को वितरित करता है (एक सार्वजनिक प्रतीक सर्वर का उपयोग - साथ ही पूर्ण प्रतीकों के संकुल कुछ विशिष्ट रिलीज के लिए सेट करता है)। हालांकि, वे जो प्रतीक वितरित करते हैं वे एक स्वच्छता चरण के माध्यम से चलते हैं जो कुछ वस्तुओं को संवेदनशील मानते हैं जिन्हें हटाते हैं। आप आईडीई में लिंकर के /PDBSTRIPPED विकल्प ("Linker | Debugging | Strip Private Symbols") का उपयोग करके वही (या समान) कर सकते हैं। विकल्प को हटाने के विवरण के लिए the MSDN docs देखें। यदि आप प्रतीकों को वितरित करने जा रहे हैं, तो शायद उस विकल्प का उपयोग करना उचित है।

+0

जाहिर है, एससीयूएमवीएम का बहुत कम असुरक्षित कोड है :) मैंने बिना संदर्भित प्रतीकों को अलग करने के बाद निष्पादन योग्य आकार सामान्य पर लौटा दिया। आपका बहुत बहुत धन्यवाद! –

+0

लिंकर संदर्भ को इंगित करने के लिए धन्यवाद – Gob00st

-7

मैं हमेशा डीबग बिल्ड, कभी नहीं रिहाई का निर्माण बाहर भेज देते हैं। मैं किसी भी नुकसान के बारे में नहीं सोच सकता, और फायदे आप उल्लेख करते हैं।

+4

अनुकूलन, उपयोगी चीजें – SLaks

+2

@SLAks हाँ कर रहे हैं सहमत हैं। मैं डीबग बिल्ड नहीं कर रहा हूं, लेकिन एक रिलीज डिबग जानकारी के साथ निर्माण ... मेरी समझ यह है कि इसमें अभी भी सभी अनुकूलन हैं, बस कुछ डीबग प्रतीकों को भी शामिल किया गया है। खैर, यही वह है जो मैं इस प्रश्न से बाहर निकलने की कोशिश कर रहा हूं। –

+0

एक कार डीलर की कल्पना करो कि "मैं हमेशा कारखाने से असली कार नहीं, प्रयोगशाला प्रोटोटाइप बेचता हूं" ... ओह, और आपको शायद ग्राहकों को डीबग रनटाइम वितरित करने की अनुमति नहीं है (IANAL, लेकिन लाइसेंस के लिए एक नज़र डालें आपका कंपाइलर)। – Tibo

1

आप इस बात का जिक्र नहीं करते कि आप कौन सी भाषा में हैं, सी ++ बनाम सी # के लिए अलग-अलग उत्तर हो सकते हैं।

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

जो कुछ भी आप समाप्त करते हैं, मैं सुनिश्चित करता हूं कि अनुकूलन चालू हो जाएं, क्योंकि यह संकलित कोड के प्रदर्शन में महत्वपूर्ण अंतर डाल सकता है।

+0

मैंने अनुरोधित स्पष्टीकरण के साथ प्रश्न अपडेट किया है। –

+0

लेकिन अन्य प्रश्न हैं ... मैं कैसे सुनिश्चित कर सकता हूं कि अनुकूलन अभी भी हैं? मेरा मतलब है, वे सक्षम हैं, लेकिन अगर "डीबग जानकारी उत्पन्न करें" सेटिंग को ओवरराइड करता है और उन्हें अक्षम करता है तो क्या होगा? –

+0

यदि आप फ्लैट सी में हैं, तो यह सेटिंग प्रोजेक्ट के लिए प्रॉपर्टी पेज में है, कॉन्फ़िगरेशन गुण :: सी/सी ++ :: अनुकूलन के तहत। मेरा मानना ​​है कि डीबग बिल्ड के लिए डिफ़ॉल्ट ऑप्टिमाइज़ेशन अक्षम (/ ओडी) हैं, और रिलीज बिल्ड के लिए अधिकतम गति (/ ओ 2) हैं। –

2

http://msdn.microsoft.com/en-us/library/xe4t6fc1(v=vs.80).aspx पर VS2005 प्रलेखन के अनुसार:

/डिबग NOICF (ताकि करने के लिए REF से/ऑप्ट विकल्प NOREF करने और आईसीएफ से चूक बदल जाता है, आप स्पष्ट रूप से/ऑप्ट निर्दिष्ट करने के लिए की आवश्यकता होगी: आरईएफ या /ओपीटी: आईसीएफ)।

मैं मेरे मामले में यह मदद की है जब मैं सक्षम दोनों:

/O2 /DEBUG /OPT:REF /OPT:ICF 
संबंधित मुद्दे