В чем разница между gcc-ggdb и gcc-g
когда я использую gcc для компиляции программ на C
Я обычно использую -g
чтобы получить некоторую отладочную информацию в файл ELF
так что gdb может помочь мне, если это необходимо.
однако, я заметил, что некоторые программы используют -ggdb
, так как он должен сделать
отладочная информация более дружественная к gdb.
чем они отличаются и что рекомендуется использовать?
Примечание: ссылка на параметры отладки программы или GCC, http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
5 ответов:
возможно, что нет никакой разницы - зависит от собственного формата ОС и как портативный вы хотите, чтобы отладочная информация должна быть. См. руководство GCC Опции Отладки.
-g
и-ggdb
почти похожи с некоторыми небольшое различия, я читал это здесь:- g создает отладочную информацию в собственном формате OS1s (stabs, COFF, XCOFF или DWARF 2).
- ggdb производит отладочную информацию, специально предназначенную для gdb.
-ggdb3 создает дополнительную отладочную информацию, например: включая определения макросов. -золотой сам по себе без указания уровня по умолчанию:
- ggdb2 (т. е. gdb для уровня 2).
У меня есть по крайней мере один пример, где-ggdb работал лучше для меня, чем другой вариант отладки, который мы использовали :
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)
Примечание: это происходит только на x86-64 коробки и уходит при компиляции с-ggdb. Но более новые версии отладчика работают даже с -gstabs+
одно дело, что "-g" является портативным (например, в Makefiles, предназначенных для выполнения на платформах, отличных от GNU). У меня была проблема переносимости в отношении -г и -золотой на экс машина недавно, поэтому я его воспитываю.
Не знаю, что -ggdb добавляет в юзабилити, хотя.
Это официальное объяснение: http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
только несколько твердых фактов, но интересно в любом случае.