[gcc] gcc -ggdb와 gcc -g의 차이점은 무엇입니까?

gcc를 사용하여 C 프로그램을 컴파일 할 때 일반적으로 -g필요한 경우 gdb가 도움이 될 수 있도록 elf 파일에 디버그 정보를 가져 오는 데 사용합니다.

그러나 -ggdb디버그 정보를 더 gdb 친화적으로 만들기 위해 일부 프로그램에서을 사용한다는 것을 알았 습니다.

그것들은 어떻게 다르며 어떤 것을 사용하는 것이 좋습니까?


참고 : 프로그램 또는 GCC 디버깅 옵션에 대한 링크, http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options



답변

차이가 없을 수도 있습니다. OS 기본 형식과 디버깅 정보의 이식성에 따라 다릅니다. GCC 매뉴얼 디버깅 옵션을 참조하십시오 .


답변

-g그리고 -ggdb일부와 유사하다 약간 나는이 글을 읽을 차이 여기 :

-g OS¹의 기본 형식 (stabs, COFF, XCOFF 또는 DWARF 2)으로 디버깅 정보를 생성합니다.

-ggdb gdb 용으로 특별히 고안된 디버깅 정보를 생성합니다.

-ggdb3 추가 디버깅 정보 (예 : 매크로 정의 포함)를 생성합니다.

-ggdb레벨을 지정하지 않고 자체적으로 기본값은 -ggdb2(즉, 레벨 2의 경우 gdb)입니다.


답변

-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”가 이식 가능하다는 것입니다 (예 : 비 GNU 플랫폼에서 실행될 Makefile에서). 최근에 AIX 시스템에서 -g 대 -ggdb와 관련하여 이식성 문제가 있었기 때문에이 문제를 제기했습니다.

그래도 -ggdb가 유용성에 무엇을 추가하는지 알 수 없습니다.


답변

이것은 공식적인 설명입니다 :
http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

어려운 사실은 거의 없지만 어쨌든 흥미 롭습니다.


답변