tags:

views:

2495

answers:

3

Hi

When I use gcc under Linux to compile some c programs, I usually use -g to get some debug information into the elf file so that gdb can help me when that is needed.

However I noticed that some use -ggdb, since it is supposed to make the debug info more gdb friendly. (And I guess that it is correct to use -ggdb since I debug with gdb...)

But I can't really say that I can notice any difference when I use them, can someone please tell me how they diff and what is recommended to use?

Thanks Johan

+3  A: 

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.

No idea on what -ggdb adds in usability, though.

DevSolar
+7  A: 

It is possible that there is no difference - depends on the OS native format and how portable you want the debugging info to be. See GCC manual Debugging Options.

luapyad
You might be right.
Johan
+2  A: 

I have atleast one example where -ggdb worked better for me than another debug option which we were using :

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+