잊을까봐 기록한다아아
컴파일
$ gcc -g <source_file> -o <exec_file>
gdb 실행
$ gdb <source_file>
gdb 종료
(gdb) quit
도움말
(gdb) help
프로그램 실행
(gdb) run <arg> "<arg>"…
프로그램 종료
(gdb) kill
프로그램 중지
CTRL+C
프로그램 속행 (재시작인가?)
(gdb) continue
라인단위 트레이스
(gdb) next
(gdb) step
(gdb) finish
변수 확인
(gdb) print <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) break <line_num>
or (gdb) break <source_file>:<line_num>
or (gdb) break < func_name >
or (gdb) break <class>::<func_proto>
임시 브레이크 (어떻게 쓰는 건지...)
(gdb) tbreak
브레이크포인트 보기
(gdb) info breakpoints
브레이크포인터 비활성화
(gdb) disable <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) nexti
(gdb) stepi
함수 디스어셈블
(gdb) disassemble [<address> or <symbol>]
참고자료: RMS's gdb Debugger Tutorial, http://www.unknownroad.com/rtfm/gdbtut/gdbtoc.html