Cuando utilizo gcc para compilar programas en C, normalmente uso -g
para 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
-g
y-ggdb
son similares con algunas ligeras diferencias, leo esto aquí :fuente
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
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.
fuente
Esta es la explicación oficial: http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
Solo unos pocos hechos concretos, pero interesantes de todos modos.
fuente