2009-02-18 7 views
5

रिलीज डीबग करने में सक्षम होने के लिए एक पीडीबी फ़ाइल की आवश्यकता है। क्या कंप्रेसर विभिन्न प्रकार के अनुकूलन (एफपीओ, पीजीओ, आंतरिक कार्यों, इनलाइनिंग इत्यादि) का उपयोग करता है जब पीडीबी फ़ाइल कम उपयोग योग्य हो सकती है? यदि हां, तो अनुकूलन का प्रभाव गंभीर हो गया है या मिश्रित होने के लिए केवल कोड की आसन्न रेखाएं हैं?क्या अनुकूलन अपने पीडीबी का उपयोग कर वीसी ++ ऐप को डीबग करने की क्षमता को प्रभावित कर सकता है?

(मैं VC2005 उपयोग कर रहा हूँ, और हमेशा अनुकूलित प्रदर्शन से अधिक debugability का चयन करेंगे - लेकिन सवाल सामान्य है)

उत्तर

7

हां, अनुकूलित कोड कम डिबगबल है। न केवल कुछ जानकारी गायब है, कुछ जानकारी बहुत भ्रामक होगी।

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

एफपीओ को डीबीग्बिलिटी को बहुत प्रभावित नहीं करना चाहिए, बशर्ते आपके पास पीडीबी हो, क्योंकि पीडीबी में एफपीओ फ्रेम के लिए ढेर को खोलने के लिए आवश्यक सभी जानकारी शामिल है। एफपीओ एक समस्या हो सकती है जब उन उपकरणों का उपयोग किया जाता है जिन्हें प्रतीकों के बिना स्टैक निशान लेने की आवश्यकता होती है। कई परियोजनाओं के लिए, आजकल एफपीओ का लाभ लाभ निदान के लिए हिट से अधिक नहीं है; इस कारण से, एमएस ने एफपीओ अनुकूलन (http://blogs.msdn.com/larryosterman/archive/2007/03/12/fpo.aspx) के साथ विंडोज विस्टा बनाने का फैसला नहीं किया।

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

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

2

हां। यह कई बार गंभीर हो सकता है, हालांकि आमतौर पर कोड की इनलाइनिंग या रीडरिंग का परिणाम अधिक होता है।

स्थानीय चर भी घड़ी विंडो में सटीक रूप से प्रदर्शित नहीं हो सकते हैं क्योंकि वे केवल रजिस्टरों में मौजूद हो सकते हैं और जब आप स्टैक फ्रेम स्विच करते हैं तो सही ढंग से प्रदर्शित नहीं हो सकते हैं।

2

अनुकूलन किसी भी प्लेटफ़ॉर्म पर डीबगिंग को गंभीर रूप से प्रभावित कर सकता है (केवल वीसी की पीडीबी फाइलों पर नहीं)।

सटीक रूप से आपने जिन कारणों का उल्लेख किया है, उनके लिए इनलाइनों में पूरी तरह से भ्रमित हो सकता है कि कौन से निर्देश इस कार्य से संबंधित हैं (कभी-कभी वे दोनों के समान होते हैं)।

इसके अलावा एक सामान्य अनुकूलन "गंदा" स्टैक फ्रेम (-जीसीसी में फोमिट-फ्रेम-पॉइंटर) करना है जो कोड को ढेर के शीर्ष पर नज़र रखने का कारण बनता है। यह ठीक है, यह अन्य परिचालनों के लिए एक अतिरिक्त रजिस्टर (x86 पर ebp) को मुक्त करता है। लेकिन यह वास्तव में क्या चल रहा है यह देखने के लिए ढेर को खोलना असंभव है। यह स्टैक पर स्थानीय चर और फ़ंक्शन पैरामीटर ढूंढना भी असंभव बनाता है।

सामान्य रूप से: "रिलीज" निर्माण से उपयोगी डीबग जानकारी प्राप्त करने की अपेक्षा न करें। यदि डिबगिंग महत्वपूर्ण है, यहां तक ​​कि रिलीज पर भी, तो आपको इसके बजाय डिबग बिल्ड "रिलीज़" होना चाहिए।

2

स्थानीय चर के अलावा, 'यह' पॉइंटर आमतौर पर अनुकूलित बिल्डों में अनुकूलित किया जाता है। कभी-कभी उस कॉल पर कॉल स्टैक में पर्याप्त रूप से जाकर काम किया जा सकता है जहां ऑब्जेक्ट पॉइंटर या संदर्भ एक ऑप्टिमाइज्ड-दूर चर के रूप में मौजूद है।

सामान्य रूप से। अनुकूलित निर्माण में सिंगल-स्टेपिंग आम तौर पर कम या ज्यादा काम करता है और यह देखने के लिए कि कोड को कौन से तार्किक निर्णय लेते हैं। डेटा का परीक्षण करना जिन पर ये निर्णय आधारित हैं आमतौर पर अधिक जटिल है।

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

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