sourcecode

GCC -g vs -g3 GDB 플래그:차이점은 무엇입니까?

copyscript 2022. 8. 29. 22:19
반응형

GCC -g vs -g3 GDB 플래그:차이점은 무엇입니까?

gcc 또는 Clang 중 하나로 C 소스 코드를 컴파일할 때는 항상-ggdb의 디버깅 정보를 생성하려면 flag를 사용합니다.

gcc -g -o helloworld helloworld.c

어떤 분들은 추천해주시는 것 같아요.-g3대신.의 차이는 무엇입니까?-g그리고.-g3깃발이요? 또한 깃발과 깃발 사이에 차이가 있나요?-g그리고.-ggdb?

문서에서:

-g

운영 체제의 기본 형식(stabs, COFF, XCOFF 또는 DWARF 2)으로 디버깅 정보를 생성합니다.GDB는 이 디버깅 정보로 동작할 수 있습니다.stabs 형식을 사용하는 대부분의 시스템에서 -g를 사용하면 GDB에서만 사용할 수 있는 추가 디버깅 정보를 사용할 수 있습니다.이 추가 정보는 GDB에서 디버깅을 더 잘 작동시키지만 다른 디버거가 크래시하거나 프로그램 읽기를 거부하게 만들 수 있습니다.추가 정보 생성 여부를 제어하려면 -gstabs+, -gstabs, -gxcoff+, -gxcoff 또는 -gvms를 사용합니다(아래 참조).

...


-gdb

GDB에서 사용할 디버깅 정보를 생성합니다.즉, 가능한 경우 GDB 확장을 포함하여 사용 가능한 가장 표현력이 높은 형식(DWARF 2, stab 또는 둘 다 지원되지 않는 경우 네이티브 형식)을 사용합니다.


-gvms 레벨

디버깅 정보를 요청하고 레벨도 사용하여 정보량을 지정합니다.기본 레벨은 2 입니다.레벨 0에서는 디버깅 정보가 전혀 생성되지 않습니다.따라서 -g0은 -g를 부정합니다.

....

레벨 3에는 프로그램에 존재하는 모든 매크로 정의와 같은 추가 정보가 포함됩니다.일부 디버거는 -g3를 사용할 때 매크로 확장을 지원합니다.

tl;dr: 구체적인 질문에 답변하기 위해-g3"매크로 정의와 같은 추가 정보...일부 디버거는 사용 시 매크로 확장을 지원합니다.-g3", 한편,-g에는 이 추가 정보는 포함되지 않습니다.

보다 넓은 답은 gcc가 다음 4가지 수준의 디버깅 정보를 지원한다는 것입니다.-g0(비활성화된 정보) ~-g3(최대 디버깅 정보).

지정-g와 동등하다-g2이상하게도 gcc docs는 어떤 정보에 대해 거의 언급하지 않습니다.-g/-g2포함 또는 제외:

디버깅 정보를 요청하고 레벨도 사용하여 정보량을 지정합니다.기본 레벨은 2 입니다.레벨 0에서는 디버깅 정보가 전혀 생성되지 않습니다.따라서 -g0은 -g를 부정합니다.

레벨 1은 디버깅하지 않을 프로그램의 일부에서 역추적을 작성하기에 충분한 최소한의 정보를 생성합니다.여기에는 함수 및 외부 변수 및 줄 번호 테이블에 대한 설명이 포함되지만 로컬 변수에 대한 정보는 포함되지 않습니다.

레벨 3에는 프로그램에 존재하는 모든 매크로 정의와 같은 추가 정보가 포함됩니다.일부 디버거는 -g3를 사용할 때 매크로 확장을 지원합니다.

언급URL : https://stackoverflow.com/questions/10475040/gcc-g-vs-g3-gdb-flag-what-is-the-difference

반응형