У чому різниця між 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" є портативним (наприклад, у файлах Makefiles, призначених для виконання на платформах, що не є GNU). Нещодавно у мене виникла проблема переносимості щодо -g проти -ggdb на машині AIX, тому я її піднімаю.

Не маючи уявлення про те, що -ggdb додає зручності використання.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.