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


90

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

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

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


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

Ответы:


38

Возможно, что нет никакой разницы - зависит от собственного формата ОС и от того, насколько переносимой должна быть информация отладки. См. Параметры отладки вручную GCC .


Можно было бы подумать о подключении тока, как это происходит?
1737973

60

-gи -ggdbпохожи с некоторыми небольшими отличиями, я прочитал это здесь :

-g производит отладочную информацию в собственном формате ОС (stabs, COFF, XCOFF или DWARF 2).

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

-ggdb3 производит дополнительную отладочную информацию, например: включая определения макросов.

-ggdbсам по себе, без указания уровня по умолчанию -ggdb2(например, gdb для уровня 2).


12

У меня есть по крайней мере один пример, когда -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 +


7

Во-первых, "-g" переносим (например, в Make-файлах, предназначенных для выполнения на платформах, отличных от GNU). Недавно у меня возникла проблема с переносимостью -g по сравнению с -ggdb на машине AIX, поэтому я поднимаю ее.

Однако не знаю, что -ggdb добавляет в удобство использования.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.