자주 사용하는 GDB 명령어
run command-line-arguments : 디버깅할 프로그램을 시작합니다. 실행 시 명령어 라인 인자를 전달할 수 있습니다.
break place : breakpoint를 설정합니다.
delete N : N 에 해당하는 breakpoint를 제거합니다. (N은 info breakpoints 명령을 통해서 확인할 수 있습니다.)
help command : GDB 명령어에 대한 설명을 제공합니다.
step : 프로그램의 현재 라인을 실행하고 다음 라인에서 정지합니다. 현재 라인이 함수인 경우 함수의 시작위치에서 정지하게 됩니다.
next : 프로그램의 현재 라인을 실행합니다. 현재 라인이 함수인 경우 함수를 실행하고 다음 라인에서 정지하게 됩니다.
finish : 현재 실행된 함수의 끝에 도달할 때까지 next 명령을 실행합니다.
continue : breakpoint를 만나거나, 프로그램이 정지될 때까지 프로그램을 실행합니다.
print E : 실행 중인 함수에서 사용하는 변수값을 화면에 표시할 때 사용합니다. E는 C언어에서 사용하는 표현식입니다.
quit : GDB를 종료합니다.
Breakpoint 사용하기
breakpoint를 설정하는 명령어는 break 입니다. break 명령어는 다음과 같이 사용할 수 있습니다.
현재 소스 파일에서 19번째 라인에 breakpoint를 걸고 싶은 경우
(gdb) b 17
현재 소스 파일에서 main 함수에 breakpoint를 걸고 싶은 경우
(gdb) b main
gui.c 파일에서 17번째 라인에 breakpoint를 걸고 싶은 경우
(gdb) b gui.c:17
gui.c 파일에서 gui_init () 함수에 breakpoint를 걸고 싶은 경우
(gdb) b gui.c:gui_init
breakpoint를 한번만 걸고 제거하고 싶은 경우에는 tbreak 명령을 이용합니다.
breakpoint에 대한 정보를 보고 싶은 경우에는 info breakpoints 명령을 이용합니다.
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x0805c53a in main_restart_idle at main.c:17
2 breakpoint keep y 0x0805b199 in main at main.c:1139
breakpoint를 사용하고 싶지 않을 경우에는 disable 명령어를 사용합니다.
(gdb) disable 2
breakpoints를 사용하고 싶은 경우에는 enable 명령어를 사용합니다.
(gdb) enable 2
breakpoint를 설정한 지점에서 무시하고 특정 횟수만큼 지나가고 싶은 경우에는 ignore 명령어를 사용합니다.
(gdb) ignore 1 2
ignore 명령어의 첫번째 인자는 breakpoint 번호, 두번째 인자는 무시하고 지나갈 횟수를 나타냅니다.
breakpoint를 제거하고 싶은 경우에는 delete 명령어를 사용합니다.
(gdb) delete 1
Watchpoint 사용하기
변수에 값이 써지는 것을 확인하고 싶은 경우 watch 명령어를 사용합니다.
(gdb) watch x
값이 변경될 경우 다음과 같은 결과를 화면에서 볼 수 있습니다.
Old value = -10291281
New value = 20
main (argc=1, argv=0xbfd8c2e4) at main.c:1176
1176 x = 20
변수에 있는 값이 다른 변수로 읽히는 것을 확인하고 싶은 경우 rwatch 명령어를 사용합니다.
(gdb) rwatch
읽기 / 쓰기를 확인하고 싶은 경우에는 awatch 명령어를 이용합니다.
설정한 watchpoint 정보를 보고 싶을 경우 info breakpoints 명령을 사용합니다.
watchpoint를 사용하고 싶지 않을 경우 breakpoint에서 사용한 disable 명령어를 사용합니다.
Call Stack 사용하기
함수가 호출된 순서를 보고 싶은 경우 backtrace 명령을 사용합니다.
현재 함수의 프레임에서 다른 함수의 프레임으로 이동하고 싶은 경우 frame 명령어를 사용합니다.
(gdb) frame 4
frame 명령어의 첫번째 인자는 이동하고 싶은 stack frame 번호를 나타냅니다.
현재 frame의 정보를 보고 싶은 경우에는 info frame 명령어를 이용합니다.
현재 frame의 지역 변수의 값을 보고 싶은 경우 info locals, 함수가 받은 파라미터 정보를 보고 싶은 경우 info args 명령어를 이용합니다.
이미 실행 중인 프로그램 디버깅하기
실행 중인 프로세스를 디버깅하고 싶은 경우 attach 명령어를 이용할 수 있습니다.
(gdb) attach 1182
attach 명령어의 첫번째 인자는 process-id 입니다.

This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 2.0 Korea License.