GCC -g बनाम -g3 GDB ध्वज: क्या अंतर है?


102

जब gcc या Clang के साथ C सोर्स कोड संकलित किया जाता है, तो मैं हमेशा -ggdb के लिए डिबगिंग जानकारी उत्पन्न करने के लिए ध्वज का उपयोग करता हूं ।

gcc -g -o helloworld helloworld.c

मैंने देखा कि कुछ लोग -g3इसके बजाय सलाह देते हैं। -gऔर -g3झंडे के बीच अंतर क्या है ? इसके अलावा वहाँ के बीच एक अंतर है -gऔर -ggdb?


15
मैं यहां इसलिए आया क्योंकि मैं किसी और के मेकअप का उपयोग कर रहा हूं, और दस्तावेज़ीकरण शुरू करने के लिए एक जानवर है। Google से एक आसान जवाब खोजने के लिए StackOverflow पर अच्छा सवाल।
ग्रीनएजेड जेड

जब तक आप पर्याप्त खुदाई करने के लिए तैयार हैं, तब तक SO पर कई प्रश्नों की संख्या "मेरे दस्तावेज को कवर कर चुकी है"। यह एक प्रश्न को खारिज करने का एक वैध कारण नहीं है।
BeeOnRope

जवाबों:


104

से डॉक्स :

जी

ऑपरेटिंग सिस्टम के मूल प्रारूप (stabs, COFF, XCOFF, या DWARF 2) में डिबगिंग जानकारी का उत्पादन करें। GDB इस डिबगिंग जानकारी के साथ काम कर सकता है। अधिकांश सिस्टम जो स्टैब्स प्रारूप का उपयोग करते हैं, -g अतिरिक्त डिबगिंग जानकारी के उपयोग को सक्षम करता है जो केवल GDB उपयोग कर सकते हैं; यह अतिरिक्त जानकारी GDB में डिबगिंग के कार्य को बेहतर बनाती है, लेकिन संभवतः अन्य डीबगर्स को क्रैश कर देती है या प्रोग्राम को पढ़ने से मना कर देती है। यदि आप कुछ विशेष जानकारी उत्पन्न करना चाहते हैं, तो नियंत्रण के लिए -gstabs +, -gstabs, -gxcoff +, -gxcoff, या -gvms (नीचे देखें) का उपयोग करना चाहते हैं।

...


-ggdb

GDB द्वारा उपयोग के लिए डिबगिंग जानकारी का उत्पादन करें। इसका मतलब यह है कि उपलब्ध सबसे अधिक अभिव्यंजक प्रारूप (DWARF 2, stabs, या देशी प्रारूप यदि उनमें से कोई भी समर्थित नहीं हैं) का उपयोग करें, यदि संभव हो तो GDB एक्सटेंशन सहित।


-gvmslevel

डिबगिंग जानकारी का अनुरोध करें और यह भी बताएं कि कितनी जानकारी निर्दिष्ट करने के लिए स्तर का उपयोग करें। डिफ़ॉल्ट स्तर 2 है। स्तर 0 डिबग सूचना का उत्पादन बिल्कुल नहीं करता है। इस प्रकार, -g0 नेगेट -g।

....

स्तर 3 में अतिरिक्त जानकारी शामिल है, जैसे कि कार्यक्रम में मौजूद सभी मैक्रो परिभाषाएँ। जब आप -g3 का उपयोग करते हैं तो कुछ डीबगर मैक्रो विस्तार का समर्थन करते हैं।


8
अभी भी यह समझाना संभव है कि "सबसे अधिक अभिव्यंजक प्रारूप" और "अतिरिक्त जानकारी" के बीच क्या अंतर है? क्या ये पैरामीटर मानार्थ हैं? उनमें से कई GDB का उल्लेख करते हैं ... धन्यवाद!
रोज़गारपैक

28

tl; dr: अपने विशिष्ट प्रश्न का उत्तर देने के लिए, -g3"अतिरिक्त जानकारी जैसे मैक्रो परिभाषाएँ शामिल हैं ... कुछ डीबगर मैक्रो विस्तार का समर्थन करते हैं जब आप उपयोग करते हैं -g3", जबकि -gयह अतिरिक्त जानकारी शामिल नहीं करता है।

व्यापक उत्तर यह है कि gcc डिबग सूचना के चार स्तरों का समर्थन करता है, -g0(डीबग सूचना अक्षम) के माध्यम से -g3(अधिकतम डिबग सूचना)।

निर्दिष्ट करने -gके बराबर है -g2। उत्सुकता से, जीसीसी डॉक्स बहुत कम जानकारी के बारे में कहते हैं -g/ -g2जिसमें शामिल हैं या शामिल नहीं हैं:

डिबगिंग जानकारी का अनुरोध करें और यह भी बताएं कि कितनी जानकारी निर्दिष्ट करने के लिए स्तर का उपयोग करें। डिफ़ॉल्ट स्तर 2 है। स्तर 0 डिबग सूचना का उत्पादन बिल्कुल नहीं करता है। इस प्रकार, -g0 नेगेट -g।

स्तर 1 न्यूनतम जानकारी पैदा करता है, कार्यक्रम के उन हिस्सों में बैकट्रैक बनाने के लिए पर्याप्त है जिन्हें आप डीबग करने की योजना नहीं बनाते हैं। इसमें फ़ंक्शन और बाहरी चर और लाइन नंबर तालिकाओं का वर्णन शामिल है, लेकिन स्थानीय चर के बारे में कोई जानकारी नहीं है।

स्तर 3 में अतिरिक्त जानकारी शामिल है, जैसे कि कार्यक्रम में मौजूद सभी मैक्रो परिभाषाएँ। जब आप -g3 का उपयोग करते हैं तो कुछ डीबगर मैक्रो विस्तार का समर्थन करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.