मैं यह निर्धारित करने की कोशिश कर रहा हूं कि डिबग प्रतीकों के साथ रिलीज बायनेरिज़ बनाने के लिए कोई डाउनसाइड्स हैं या नहीं। हमारी रिलीज बिल्ड के लिए, हम इस समय -O3
के साथ संकलित करते हैं और यदि कोई क्रैश होता है, तो कोर बेकार के बगल में हैं .
तो, मैं डिबग प्रतीकों, यानी -O3 -g
में छोड़ने के लिए बिल्ड को संशोधित करना चाहता हूं, लेकिन इसका प्रतिरोध है क्योंकि भावना यह है कि कुछ प्रभाव हो सकता है (एक तरफ) बाइनरी के आकार से)। मुझे पता है कि प्रतीकों को अलग करके आकार के मुद्दे को ठीक किया जा सकता है, लेकिन क्या कुछ और सूक्ष्म है जो मुझे याद आ रहा है?
2 जवाब
प्रतीकों को बाइनरी से अलग करें।
g++ -ggdb -o target obj1.o obj2.o ...
strip target --only-keep-debug -o target.dbg
strip target
फिर जीडीबी में, symbol-file target.dbg
का प्रयोग करें
संपादित करें: वास्तविक प्रश्न पर:
नकारात्मक पक्ष हैं:
- आसान रिवर्स इंजीनियरिंग (यदि यह आपको चिंतित करता है)
- बड़े बायनेरिज़
निष्पादन की गति प्रभावित नहीं होती है - डीबग प्रतीकों को केवल एक अलग खंड में बाइनरी में जोड़ा जाता है, वे आपके वर्चुअल एड्रेस स्पेस आकार को प्रभावित कर सकते हैं लेकिन कुछ और नहीं।
यह आकार को प्रभावित करता है, और इस प्रकार कैशिंग और मेमोरी को भी प्रभावित करता है।
यदि आप कंपाइलर विकल्पों के बारे में जानकारी पढ़ते हैं, तो आप देखेंगे कि यह कहता है कि कभी-कभी अनियंत्रित लूप उदाहरण के लिए कोड को धीमा कर देते हैं क्योंकि आकार में वृद्धि कैशिंग को तोड़ती है और अधिक मेमोरी प्राप्त करती है।
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।