GCC -g vs -g3 GDB 플래그:차이점은 무엇입니까?
gcc 또는 Clang 중 하나로 C 소스 코드를 컴파일할 때는 항상-g
gdb의 디버깅 정보를 생성하려면 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
'sourcecode' 카테고리의 다른 글
c와 c++의 컨텍스트에서 static 변수, auto 변수, global 변수 및 local 변수의 차이 (0) | 2022.08.29 |
---|---|
가장 작은 int인 -2147483648의 유형이 '롱'인 이유는 무엇입니까? (0) | 2022.08.29 |
동일한 페이지에서 서로 다른 쿼리에 vue-apollo 구성 요소 사용 (0) | 2022.08.29 |
VUE의 상위 구성 요소에서 모드 대화 상자 전환 (0) | 2022.08.29 |
nuxt.js 컴포넌트의 자동 Import는 퍼포먼스에 악영향을 미칩니까? (0) | 2022.08.29 |