2009-03-21 17 views
62

Cuando uso gcc para compilar programas en C lo general el uso -g para obtener alguna información de depuración en el archivo elf de manera que el BGF me puede ayudar si es necesario.¿Cuál es la diferencia entre -ggdb gcc gcc -g y

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 es el recomendado para usar?


Nota: Un enlace a las opciones para comprobar el programa o GCC, http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

Respuesta

27

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

5

Una cosa es que "-g" es portátil (por ejemplo, en Makefile destinado a ser ejecutado en la no-GNU plataformas). Hace poco tuve un problema de portabilidad con respecto a -g vs. -ggdb en una máquina AIX, por eso lo menciono.

Sin embargo, no hay idea de qué -ggdb agrega en usabilidad.

9

que tienen al menos un ejemplo donde -ggdb funcionó mejor para mí que otra opción de depuración, que estábamos usando:

[email protected]:~> 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; 
} 
[email protected]:~> gcc -gstabs+ main.c -o main 

[email protected]:~> 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 
[email protected]:~> /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 sólo ocurre en las cajas x86-64 y desaparece cuando se compila con -ggdb . Sin embargo, las nuevas versiones del depurador funcionan incluso con -gstabs +

35

-g y -ggdb son casi similares con algunas ligeras diferencias, leí este here:

-g produce información de depuración en el formato nativo OS¹s (puñaladas, COFF, XCOFF o ENANO 2).

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

-ggdb3 produce información de depuración adicional, por ejemplo: incluidas las definiciones de macro. -ggdb por sí mismo sin especificar el nivel se predetermina a

-ggdb2 (es decir, gdb para el nivel 2).

Cuestiones relacionadas