gcc -ggdb和gcc -g有什么区别?
当我使用gcc编译C程序时,我通常使用-g
来获取一些debugging信息到elf文件中,这样gdb可以在需要时帮助我。
但是,我注意到有些程序使用-ggdb
,因为它应该使debugging信息更加友好。
他们如何不同,build议使用?
注意:指向debugging程序或GCC选项的链接, http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
有可能没有区别 – 取决于操作系统的本地格式,以及您希望debugging信息的便携性。 请参阅GCC手动debugging选项 。
-g
和-ggdb
几乎有些细微差别,我在这里读到:
-g以OS本地格式(stabs,COFF,XCOFF或DWARF 2)产生debugging信息。
-ggdb生成专门用于gdb的debugging信息。
-ggdb3产生额外的debugging信息,例如:包含macros定义。 -ggdb本身没有指定级别的默认值
-ggdb2(即,2级的gdb)。
我至less有一个例子,其中-ggdb比我们使用的另一个debugging选项更适合我:
amitkar@lohgad:~> 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; } amitkar@lohgad:~> gcc -gstabs+ main.c -o main amitkar@lohgad:~> 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 amitkar@lohgad:~> /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编译时会消失。 但是更新版本的debugging器甚至可以使用-gstabs +工作
有一件事是“-g”是可移植的(例如,在Makefiles注定要在非GNU平台上执行)。 我最近在AIX机器上有一个关于-g和-ggdb的可移植性问题,这就是为什么我提起它的原因。
不知道什么-ggdb增加了可用性。
这是官方的解释: http : //gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
只有很less的事实,但无论如何有趣。