В чем разница между gcc-ggdb и gcc-g


когда я использую gcc для компиляции программ на C Я обычно использую -g чтобы получить некоторую отладочную информацию в файл ELF так что gdb может помочь мне, если это необходимо.

однако, я заметил, что некоторые программы используют -ggdb, так как он должен сделать отладочная информация более дружественная к gdb.

чем они отличаются и что рекомендуется использовать?


Примечание: ссылка на параметры отладки программы или GCC, http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

5 66

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

только несколько твердых фактов, но интересно в любом случае.