티스토리 뷰
GCC 주요 옵션
-o : 컴파일 결과물의 이름을 지정할 수 있다.
# a.out 파일이 생성된다.
gcc hello.c
# hello 파일이 생성된다.
gcc hello.c -o hello
-w : 모든 경고 메시지를 숨긴다.
-Wall : 모든 경고 메시지를 보여준다.
-Werror : 경고 메시지를 에러로 출력한다.
gcc -w hello.c
gcc -Wall hello.c
gcc -Werror hello.c
-On (n은 정수)
-O 옵션은 컴파일러의 최적화 정도를 결정한다.
-O0 (default) : 최적화를 하지 않는다.
-O1 (or -O) : 1단계 최적화
-O2 : 2단계 최적화
-O3 : 3단계 최적화
gcc -O3 -o hello hello.c
-g
-g 옵션은 소스 레벨에서 디버깅이 가능하도록 도와준다. -g 옵션 역시ㅛ 3단계로 구분된다.
-g1, -g2 (-g), -g3 (-ggdb3)
GDB 주요 커맨드
gdb ./[program] : GDB를 시작한다.
gdb ./hello
run(r) [arguments] : GDB로 프로그램을 실행한다.
gdb run
gdb r test1 test2
backtrace(bt) : 스택을 보여준다.
gdb bt
list(l) [place] : 앞 뒤로 5줄씩 소스를 출력한다. [place]에는 함수명, 줄번호, 파일명:줄번호, 파일명:함수명 등이 다양하게 들어간다.
gdb list main
gdb l hello.c:16
break(b) [place] : 중단점을 지정한다. [place]에는 함수명, 줄번호, 파일명:줄번호, 파일명:함수명, if문 등이 다양하게 들어간다.
gdb -b main
gdb -b hello.c:5
gdb -b 30 if var == 0 # var 값이 0이면 30번째 줄에 중단점 설정
info break (i b) : 중단점들의 정보를 출력한다.
gdb info break
gdb info b
gdb i b
delete(d) [N] : N번 중단점을 삭제한다. info b 명령어를 통해 N을 알 수 있다. N을 쓰지 않으면 중단점을 모두 삭제한다.
gdb delete 10
gdb d 10
gdb d
next(n) : 다음 문장을 실행한다. 다음 문장이 함수 호출이라면, 그냥 호출 값만 받아온다.
gdb n
step(s) : 다음 문장을 실행한다. 다음 문장이 함수 호출이라면, 해당 함수에 들어가서 한 문장씩 실행한다.
gdb s
continue(c) : 다음 중단점까지 실행한다.
gdb c
advance [N] : N번째 라인까지 실행한다.
gdb advance 19
print(p) [something] : 현재 [something] 값을 출력한다. [something]에는 변수, array 값, 함수 등이 들어간다.
gdb p i
gdb p asdf[20]
display [something] : [something] 값이 바뀔 때마다 자동으로 해당 값을 출력해준다.
gdb display i
x [option] [var] : 메모리 주소 내용을 출력한다.
gdb x /4bt &i
option은 다음과 같다.
b - byte (8bit)
h - halfword (16bit)
w - word (32bit)
g - giant word (64bit)
t - binary
x - hex
d - decimal
o - octal
# 만약 i가 15213이라면
# int i = 15213
# i의 메모리 주소에 있는 값을 16비트 정수 1개로 보여줘
gcc x /1wd &i # 15213
# i의 메모리 주소에 있는 값을 8비트 이진수 4개로 보여줘
gcc x /4bt &i # 01101101 00111011 000000 000000
kill(k) : 프로그램을 종료한다.
gdb k
quit(q) : GDB를 종료한다.
gdb q
'공부' 카테고리의 다른 글
| 시스템 프로그래밍 - 수 표현법 (0) | 2022.10.20 |
|---|---|
| 시스템 프로그래밍 - Modular programming (0) | 2022.10.20 |
| Unix programming - 2 (0) | 2022.10.18 |
| Unix Programming - 1 (0) | 2022.10.18 |
| 컴퓨터네트워크 Chapter 15 (0) | 2022.10.11 |