gcc的调试信息选项-g和-ggdb的本质区别是什么?

时间:2021-03-01 16:37:59
-g和-ggdb都是生成调试信息,我试了一下,-ggdb生成的2进制文件稍大几个字节,不过在gdb里面debug的时候感觉不到有什么不同。

那这个两个选项到底有什么本质不同? 什么时候必须用其中的一个而不能用另一个?

1 个解决方案

#1


  -g  
           Produce debugging information in the operating system's native format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this debugging information.

           On most systems that use stabs format, -g enables use of extra debugging information that only GDB can use; this extra information makes debugging work
           better in GDB but will probably make other debuggers crash or refuse to read the program.  If you want to control for certain whether to generate the
           extra information, use -gstabs+, -gstabs, -gxcoff+, -gxcoff, or -gvms (see below).

           GCC allows you to use -g with -O.  The shortcuts taken by optimized code may occasionally produce surprising results: some variables you declared may
           not exist at all; flow of control may briefly move where you did not expect it; some statements may not be executed because they compute constant
           results or their values were already at hand; some statements may execute in different places because they were moved out of loops.

           Nevertheless it proves possible to debug optimized output.  This makes it reasonable to use the optimizer for programs that might have bugs.

           The following options are useful when GCC is generated with the capability for more than one debugging format.

-ggdb
           Produce debugging information for use by GDB.  This means to use the most expressive format available (DWARF 2, stabs, or the native format if neither of those are supported), including GDB extensions if at all possible.

#1


  -g  
           Produce debugging information in the operating system's native format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this debugging information.

           On most systems that use stabs format, -g enables use of extra debugging information that only GDB can use; this extra information makes debugging work
           better in GDB but will probably make other debuggers crash or refuse to read the program.  If you want to control for certain whether to generate the
           extra information, use -gstabs+, -gstabs, -gxcoff+, -gxcoff, or -gvms (see below).

           GCC allows you to use -g with -O.  The shortcuts taken by optimized code may occasionally produce surprising results: some variables you declared may
           not exist at all; flow of control may briefly move where you did not expect it; some statements may not be executed because they compute constant
           results or their values were already at hand; some statements may execute in different places because they were moved out of loops.

           Nevertheless it proves possible to debug optimized output.  This makes it reasonable to use the optimizer for programs that might have bugs.

           The following options are useful when GCC is generated with the capability for more than one debugging format.

-ggdb
           Produce debugging information for use by GDB.  This means to use the most expressive format available (DWARF 2, stabs, or the native format if neither of those are supported), including GDB extensions if at all possible.