저는 최근에 Linux를 프로그래밍 도구로 사용하기 시작했습니다. 내 책에는 GCC가 두 가지 옵션, -g
즉 및 와 함께 사용되는 것을 볼 수 있습니다 -o
. 이제 이것이 -o
파일 이름을 설정한다는 것을 알지만 그 목적은 무엇입니까 -g
? 나는 이것이 디버깅과 관련이 있을 것이라고 생각했지만 -g
인수 없이 컴파일된 프로그램도 디버깅 가능합니다. 그래서 그것은 무엇입니까?
답변1
매뉴얼 인용 : Produce debugging information in the operating system's native format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this debugging information.
. 나는 RTFM 전문가가 될 생각은 없지만 -g에 대한 매뉴얼 섹션을 읽으면 이 경우 질문에 대한 답을 얻을 수 있습니다. -o에 따르면 당신 말이 맞습니다.
답변2
-g 옵션을 사용하면 GDB가 사용할 수 있는 추가 디버깅 정보를 사용할 수 있습니다. 다음은 C 코드의 예입니다.
int main() {
int x = 1/0;
}
-g 옵션 없이 컴파일하고 gdb 출력을 살펴보겠습니다.
$ gcc test.c -o test
test.c: In function ‘main’:
test.c:2:11: warning: division by zero [-Wdiv-by-zero]
$ gdb -q ./test
Reading symbols from /home/mariusz/Dokumenty/Projekty/Testy/test...(no debugging symbols found)...done.
(gdb) run
Starting program: /home/mariusz/Dokumenty/Projekty/Testy/test
Program received signal SIGFPE, Arithmetic exception.
0x080483cb in main ()
이제 -g 옵션을 사용하십시오:
$ gcc -g test.c -o test
test.c: In function ‘main’:
test.c:2:11: warning: division by zero [-Wdiv-by-zero]
$ gdb -q ./test
Reading symbols from /home/mariusz/Dokumenty/Projekty/Testy/test...done.
(gdb) run
Starting program: /home/mariusz/Dokumenty/Projekty/Testy/test
Program received signal SIGFPE, Arithmetic exception.
0x080483cb in main () at test.c:2
2 int x = 1/0;
보시다시피 이제 오류 줄에 대한 정보가 있습니다.
답변3
디버깅 관련:
(에서 man gcc
)
-g 운영 체제의 기본 형식(stabs, COFF, XCOFF 또는 DWARF 2)으로 디버깅 정보를 생성합니다. GDB는 이 디버깅 정보를 사용할 수 있습니다.
프로그램의 기호를 디버깅하지 않고 프로그램에서 디버거를 실행할 수 있지만 이는 어둠 속에서 키를 찾으려는 것과 같습니다. 예를 들어 중단점을 설정할 수 없습니다.
(gdb) break 6
No symbol table is loaded.
이것은 번거로운 일입니다.