¿Cuál es la diferencia entre gcc -ggdb y gcc -g?

90

Cuando utilizo gcc para compilar programas en C, normalmente uso -gpara obtener información de depuración en el archivo elf para que gdb pueda ayudarme si es necesario.

Sin embargo, noté que algunos programas usan -ggdb, ya que se supone que hace que la información de depuración sea más amigable con gdb.

¿En qué se diferencian y cuál se recomienda utilizar?


Nota: un enlace a las opciones para depurar su programa o GCC, http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

Johan
fuente

Respuestas:

38

Es posible que no haya diferencia, depende del formato nativo del sistema operativo y de qué tan portátil desea que sea la información de depuración. Consulte Opciones de depuración manual de GCC .

luapyad
fuente
¿Podría considerar vincular la corriente como lo hace?
1737973
60

-gy -ggdbson similares con algunas ligeras diferencias, leo esto aquí :

-g produce información de depuración en el formato nativo del sistema operativo (puñaladas, COFF, XCOFF o DWARF 2).

-ggdb produce información de depuración diseñada específicamente para gdb.

-ggdb3 produce información de depuración adicional, por ejemplo: incluidas las definiciones de macros.

-ggdbpor sí mismo sin especificar el nivel predeterminado -ggdb2(es decir, gdb para el nivel 2).

mrz
fuente
12

Tengo al menos un ejemplo en el que -ggdb funcionó mejor para mí que otra opción de depuración que estábamos usando:

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)

Nota: Esto ocurre solo en cajas x86-64 y desaparece cuando se compila con -ggdb. Pero las versiones más recientes del depurador funcionan incluso con -gstabs +


fuente
7

Una cosa es que "-g" es portable (por ejemplo, en Makefiles destinados a ser ejecutados en plataformas que no son GNU). Recientemente tuve un problema de portabilidad con respecto a -g vs -ggdb en una máquina AIX, por eso lo menciono.

Sin embargo, no tengo idea de lo que agrega -ggdb en usabilidad.

DevSolar
fuente