2009-03-21 16 views
62

जब मैं जीसीसी का उपयोग सी कार्यक्रमों संकलित करने के लिए मैं आमतौर पर -g का उपयोग योगिनी फ़ाइल में कुछ डिबग जानकारी पाने के लिए इतना है कि gdb मेरी मदद कर सकते यदि आवश्यक हो तो।क्या जीसीसी -ggdb और जीसीसी जी के बीच अंतर है

हालांकि, मैंने देखा है कि कुछ प्रोग्राम -ggdb का उपयोग करते हैं, क्योंकि इसे डीबग जानकारी और अधिक gdb अनुकूल बनाना है।

वे कैसे भिन्न होते हैं और किसकी उपयोग करने की अनुशंसा की जाती है?


नोट: आपका प्रोग्राम या जीसीसी डिबगिंग के लिए विकल्प का एक लिंक, http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

उत्तर

27

यह संभव है कि कोई अंतर न हो - ओएस मूल प्रारूप पर निर्भर करता है और आप डिबगिंग जानकारी को कितना पोर्टेबल चाहते हैं। जीसीसी मैनुअल Debugging Options देखें।

5

एक बात है कि "जी" है Makefiles में गैर जीएनयू पर निष्पादित करने के लिए किस्मत में पोर्टेबल (जैसे है प्लेटफार्मों)। मेरे पास हाल ही में एक एईक्स मशीन पर -g बनाम -ggdb के बारे में एक पोर्टेबिलिटी समस्या थी, इसलिए मैं इसे लाता हूं।

क्या कोई विचार नहीं है -ggdb उपयोगिता में क्या जोड़ता है, हालांकि।

9

मैं कम से कम एक उदाहरण है जहां -ggdb एक और डिबग विकल्प की तुलना में मेरे लिए बेहतर काम किया है जो हम उपयोग कर रहे थे:

[email protected]:~> cat > main.c 
#include <stdio.h> 

int main(int argc, char **argv) 
{ 
     printf("Args :%d\n", argc); 
     for (;argc > 0;) 
       printf("%s\n", argv[--argc]); 

     return 0; 
} 
[email protected]:~> gcc -gstabs+ main.c -o main 

[email protected]:~> file main 
main: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.4, dynamically linked (uses shared libs), not stripped 
[email protected]:~> /usr/bin/gdb ./main 
GNU gdb 6.6.50.20070726-cvs 
Copyright (C) 2007 Free Software Foundation, Inc. 
GDB is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 
Type "show copying" to see the conditions. 
There is absolutely no warranty for GDB. Type "show warranty" for details. 
This GDB was configured as "x86_64-suse-linux"... 
Using host libthread_db library "/lib64/libthread_db.so.1". 
(gdb) break main 
Breakpoint 1 at 0x400577: file main.c, line 5. 
(gdb) run 
Starting program: /home/amitkar/main 

Breakpoint 1, main (argc=Cannot access memory at address 0x8000df37d57c 
) at main.c:5 
5    printf("Args :%d\n", argc); 
(gdb) print argc 
Cannot access memory at address 0x8000df37d57c 
(gdb) 

नोट: यह केवल x86-64 बक्से पर होता है और जब -ggdb साथ संकलित चली जाती है । http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

केवल कुछ मुश्किल तथ्यों, लेकिन दिलचस्प वैसे भी: लेकिन डिबगर के नए संस्करण -gstabs +

3

यह आधिकारिक विवरण है के साथ भी काम करते हैं।

35

-g और -ggdb कुछ मामूली अंतर के साथ लगभग समान हैं, मैं इस here पढ़ें:

जी OS¹s देशी प्रारूप में डीबगिंग जानकारी का उत्पादन (stabs, coff, XCOFF, या बौना 2)।

-ggdb विशेष रूप से जीडीबी के लिए डीबगिंग जानकारी उत्पन्न करता है।

-ggdb3 अतिरिक्त डीबगिंग जानकारी उत्पन्न करता है, उदाहरण के लिए: मैक्रो परिभाषाओं सहित। स्तर को

-ggdb2 (यानी, स्तर 2 के लिए gdb) को निर्दिष्ट किए बिना स्वयं द्वारा -ggdb।

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