1. 기본 명령 #
gdb 실행 + 프로그램 실행
$ gdb <filename>gdb 실행 + 프로그램 실행 with args
$ gdb --args <filename> [arg1] [arg2] ...프로그램 종료
(gdb) killgdb 종료
(gdb) quit도움말
(gdb) help
프로그램 속행
(gdb) continue (gdb) c소스 라인 단위 트레이스
(gdb) next (gdb) n (gdb) step (gdb) s (gdb) finish # 현재 함수를 수행하고 빠져 나감 (gdb) return # 현재 함수를 수행하지 않고 빠져 나감 (gdb) return 123 # 현재 함수를 수행하지 않고 빠져 나감, 단 리턴 값 123으로Instruction 단위 트레이스
(gdb) nexti (gdb) stepi변수 확인
(gdb) print <var> (gdb) p <var>변수 변경
(gdb) set <var> = <value> or (gdb) set var <var> = <value>코드 실행
(gdb) call <func_name>(<args>)
콜스택 보기
(gdb) backtrace콜스택에서 프레임 선택
(gdb) frame <frame_num>
스택 정보, 지역 변수, 인자 출력
(gdb) info frame (gdb) info locals (gdb) info args소스 출력
(gdb) list (gdb) l
브레이크포인트 설정
(gdb) break <line_num> or (gdb) break <source_file>:<line_num> or (gdb) break <func_name> or (gdb) break <class>::<func_proto>조건으로 브레이크 설정
(gdb) (gdb) b <line_num> if <condition> ex) (gdb) b 95 if cnt == 10임시 브레이크
(gdb) tbreak브레이크포인트 보기
(gdb) info breakpoints브레이크포인트 활성/비활성
(gdb) enable <breakpnt_num>
(gdb) disable <breakpnt_num>브레이크포인트 삭제
(gdb) clear <line_num> (gdb) cl a.c:func # a.c 파일의 func함수의 브레이크 포인트 지움 (gdb) delete <breakpnt_num>브레이크포인트 일정 회수 건너뛰기
(gdb) ignore <breakpnt_num> <number>
변수의 쓰기 Watchpoint 설정
(gdb) watch <var>변수의 읽기 Watchpoint 설정
(gdb) rwatch <var>변수의 읽기/쓰기 Watchpoint 설정
(gdb) awatch <var>Watchpoint 비활성화
(gdb) disable <watchpoint_num> (Watchpoint는 info breakpoints 명령어로 확인 가능)
메모리 확인
(gdb) x/<FTM> [<address> or <symbol>] (<FTM> in s(string), c(character), 4c(4 characters), t(32bits binaries), 3x(24bytes in hex)레지스터 확인
(gdb) info registers코어 덤프 파일 디버그
$ gdb <coredumped_file> (gdb) core core디스어셈블
(gdb) disassemble [<address> or <symbol>]
2.1. layout src #
소스 코드와 함께 디버깅
(gdb) layout src기타 레이아웃
(gdb) help layout (gdb) layout src # 소스 코드와 명령 창 (gdb) layout asm # 디스어셈블리와 명령 창 (gdb) layout split # 소스 코드와 디스어셈블리와 명령 창 (gdb) layout resg # 레지스터 창 (gdb) layout prev # 이전 모드 (gdb) layout next # 다음 모드창 크기 변경
# winheight <win_name> [+ | -] <#lines> (gdb) winheight src + 5layout 닫는 방법
Ctrl-x + a