В чем разница между gcc -ggdb и gcc -g - PullRequest
74 голосов
/ 21 марта 2009

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

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

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


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

Ответы [ 5 ]

44 голосов
/ 11 февраля 2013

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

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

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

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

-ggdb2 (т. Е. GDB для уровня 2).

29 голосов
/ 21 марта 2009

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

9 голосов
/ 10 июля 2009

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

5 голосов
/ 21 марта 2009

Одна вещь заключается в том, что «-g» является переносимым (например, в файлах Makefile, предназначенных для выполнения на не-GNU платформах) У меня недавно была проблема с переносимостью относительно -g vs. -ggdb на машине с AIX, поэтому я поднял ее.

Не знаю, что -ggdb добавляет юзабилити.

3 голосов
/ 26 февраля 2011

Это официальное объяснение: http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

Лишь несколько неопровержимых фактов, но все равно интересно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...