2010-02-11 13 views
7

के साथ डीबगिंग करते समय परेशानी का कारण बन सकता है, मैं सोच रहा था कि क्या मुझे जीसीसी विकल्प की एक सूची मिल सकती है जो जीडीबी को अजीब व्यवहार करने का कारण बन सकती है।जीसीसी विकल्प जो जीडीबी

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

(मैं वर्तमान में gdb में एक mpeg2 विकोडक को चलाने के लिए कोशिश कर रहा हूँ और मैं अनुकूलन झंडे को हटाने के बाद भी अजीब व्यवहार मिलता है ...)

+0

अजीब का वर्णन करें। क्या आपने -ggdb जोड़ा था? और सबसे महत्वपूर्ण: लिखें कि आप अभी भी किस विकल्प का उपयोग करते हैं। – ebo

+0

केवल पहले से ही -g और -g3 का उपयोग किया जाता है। मेरे मामले में अजीब व्यवहार इस तरह कुछ है: एक कार्य परिभाषा लाइन 654 पर शुरू होती है, 'एन' फिर लाइन 765 पर कूद जाती है, एक और 'एन' लाइन 654 पर वापस कूदती है और इसी तरह 4 या 5 बार, लाइन के लिए 765 वह नहीं है जो अगला होना चाहिए ... लेकिन अगर मैं इस झंडे की तलाश कर रहा हूं जो इस समस्या का कारण बनता है, तो मैं अलग-अलग विकल्पों का उत्सुक हूं जो आम तौर पर अजीब व्यवहार का कारण बन सकता है। – claf

+0

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

उत्तर

9

मुझे लगता है कि जब बुला कहने के लिए क्या झंडे आप उपयोग should't मुश्किल है डीबगिंग के लिए जीसीसी। gcc docs ध्यान दें कि डिफ़ॉल्ट डीबग झंडे -g और -O2 हैं, और -g -O0 -fno-inline का उपयोग करके किसी भी अनुकूलन और फ़ंक्शन इनलाइनिंग को अक्षम करता है।

मेरी राय में, यदि आप वास्तव में यह जानना चाहते हैं कि कुछ भी आपकी डीबगिंग प्रक्रिया को गड़बड़ नहीं करेगा, तो आपको बस -g -O0 -fno-inline झंडे के साथ संकलित करना होगा।

+0

यदि आपके पास एक ही समय में है- ओ 3 ध्वज, कुछ अन्य ध्वज, और "-g -O0 -fno-inline" क्या होता है? – user65636

+0

मैंने एक साधारण प्रोग्राम बनाया और -O3 -g -O0 -fno-inline -S का उपयोग किया और मेरे पास -g -O0 -fno-inline -S का एक ही आउटपुट था। लेकिन -g -O0 -fno-inline -O3 -S आउटपुट अलग था, इस मामले में, -O3 के साथ असेंबली कोड -O3 के बिना उत्पन्न कोड से बड़ा था। मैं अभी तक इस परिणाम के प्रभावों को नहीं जानता। – coelhudo

+2

कोई आश्चर्य नहीं, -O0 पहले मामले में -ओ 3 ओवरराइट करता है। जीसीसी मैनपेज कहता है: "यदि आप स्तर-संख्या के साथ या बिना एकाधिक-ओ विकल्पों का उपयोग करते हैं, तो आखिरी ऐसा विकल्प वह प्रभावी है।" – bug313

0

रूप GCC documentation में कहा गया है, तो आप -Og उपयोग करना चाहिए:

-Og

अनुकूलन डीबगिंग अनुभव। -ऑग उन अनुकूलन को सक्षम बनाता है जो डिबगिंग में हस्तक्षेप नहीं करते हैं। यह मानक संपादन-संकलन-डीबग चक्र के लिए अनुकूलन स्तर होना चाहिए, जो तेजी से संकलन और एक अच्छा डिबगिंग अनुभव बनाए रखते हुए अनुकूलन का उचित स्तर प्रदान करता है।

यह प्रत्येक ऑप्टमाइज़ेशन ध्वज का वर्णन करता है और यह डिबगिंग को कैसे प्रभावित कर सकता है।

+1

सिद्धांत रूप में हां, अभ्यास में '-O0' बेहतर हो सकता है –

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