Quando uso o gcc para compilar programas C, geralmente uso -g
para obter algumas informações de depuração no arquivo elf para que o gdb possa me ajudar se necessário.
No entanto, notei que alguns programas usam -ggdb
, já que é para tornar as informações de depuração mais amigáveis ao gdb.
Como eles diferem e qual é recomendado usar?
Observação: um link para as opções de Debugging Your Program ou GCC, http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
-g
e-ggdb
são semelhantes com algumas pequenas diferenças, li isto aqui :fonte
Tenho pelo menos um exemplo em que -ggdb funcionou melhor para mim do que outra opção de depuração que estávamos 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: Isso acontece apenas em caixas x86-64 e desaparece quando compilado com -ggdb. Mas as versões mais recentes do depurador funcionam mesmo com -gstabs +
fonte
Uma coisa é que "-g" é portátil (por exemplo, em Makefiles destinados a serem executados em plataformas não GNU). Tive um problema de portabilidade em relação a -g vs. -ggdb em uma máquina AIX recentemente, é por isso que o mencionei.
Não tenho ideia do que -ggdb adiciona em usabilidade, no entanto.
fonte
Esta é a explicação oficial: http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
Apenas alguns fatos concretos, mas interessantes de qualquer maneira.
fonte