Lorsque j'utilise gcc pour compiler des programmes C, j'utilise habituellement -g
pour obtenir des informations de débogage dans le fichier elf afin que gdb puisse m'aider si nécessaire.
Cependant, j'ai remarqué que certains programmes l'utilisent -ggdb
, car ils sont censés rendre les informations de débogage plus conviviales pour gdb.
En quoi diffèrent-ils et lequel est-il recommandé d'utiliser?
Remarque: un lien vers les options de débogage de votre programme ou GCC, http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
-g
et-ggdb
sont similaires avec quelques légères différences, je lis ceci ici :la source
J'ai au moins un exemple où -ggdb fonctionnait mieux pour moi qu'une autre option de débogage que nous utilisions:
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)
Remarque: cela se produit uniquement sur les boîtiers x86-64 et disparaît une fois compilé avec -ggdb. Mais les nouvelles versions du débogueur fonctionnent même avec -gstabs +
la source
Une chose est que "-g" est portable (par exemple dans les Makefiles destinés à être exécutés sur des plates-formes non GNU). J'ai eu un problème de portabilité concernant -g par rapport à -ggdb sur une machine AIX récemment, c'est pourquoi j'en parle.
Aucune idée de ce que -ggdb ajoute à la convivialité, cependant.
la source
Voici l'explication officielle: http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
Seuls quelques faits concrets, mais intéressants quand même.
la source