Gcc-ggdb 和 gcc-g 的区别是什么

当我使用 gcc 编译 C 程序时 我通常使用 -g获得一些调试信息到精灵文件 如果需要的话,广东发展银行可以帮助我。

但是,我注意到一些程序使用 -ggdb,因为它应该使 调试信息对 gdb 更友好。

它们有什么不同,建议使用哪一种?


注意: 调试程序或 GCC 选项的链接,< a href = “ http://GCC.gnu.org/onlinedocs/GCC/Debuging-Options.html # Debuging-Options”rel = “ noReferrer”> http://GCC.gnu.org/onlinedocs/GCC/Debugging-options.html#Debugging-options

66862 次浏览

One thing is that "-g" is portable (e.g. in Makefiles destined to be executed on non-GNU platforms). I had a portability issue regarding -g vs. -ggdb on an AIX machine recently, that's why I bring it up.

但是不知道-ggdb 增加了什么可用性。

这是可能的,没有区别-取决于操作系统本机格式和可移植性,你想要的调试信息是。参见海湾合作委员会手册 调试选项

我至少有一个例子-ggdb 比我们使用的另一个调试选项更适合我:

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)

Note: This happens only on x86-64 boxes and goes away when compiled with -ggdb. But newer versions of the debugger do work even with -gstabs+

这是官方的解释: http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

只有一些确凿的事实,但还是很有趣。

-g-ggdb有一些相似的 轻微的的差异,我读这个 给你:

-g以 OS1本机格式(stabs、 COFF、 XCOFF 或 DWARF2)产生调试信息。

-ggdb产生专门针对 gdb 的调试信息。

-ggdb3产生额外的调试信息,例如: 包括宏定义。

-ggdb by itself without specifying the level defaults to -ggdb2 (i.e., gdb for level 2).