निष्पादन योग्य का आकार 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 देखें। यदि आप प्रतीकों को वितरित करने जा रहे हैं, तो शायद उस विकल्प का उपयोग करना उचित है।
स्रोत
2011-06-15 21:45:10
जाहिर है, एससीयूएमवीएम का बहुत कम असुरक्षित कोड है :) मैंने बिना संदर्भित प्रतीकों को अलग करने के बाद निष्पादन योग्य आकार सामान्य पर लौटा दिया। आपका बहुत बहुत धन्यवाद! –
लिंकर संदर्भ को इंगित करने के लिए धन्यवाद – Gob00st