GDB 사용하는데 많이 사용하는 command 위주로 정리를 했으며 사용하면서 필요한 정보는 gdb의 help를 이용해서 참조하면서 사용하시면 될 것 같습니다.
1.compile 방법
compile시 -g debug option을 꼭 추가해야 합니다. #gcc test.c -g -o test -g : debug option(-O optimization 은 주면 안됨) -o : 실행 파일 이름 설정 *debug option적용된 file인지 확인 방법 #objdump -g test .debug_xxx section들이 존재해야 한다. <예> .debug_arranges .debug_info .debug_str |
2. gdb 시작/종료
-시작 gdb [프로그램명] gdb [프로그램명] [core 파일명] gdb [프로그램명] [프로세스 PID] [example]
-종료 (gdb)quit (gdb)ctrl+d |
3. 각 class별로 commands
-running
|
|
advance |
advance 20 현재 파일의 20라인을 만날 때까지 진행 advance file.c:20 file.c 파일의 20라인을 만날 때까지 진행
|
continue |
c 다음 breakpoint 를 만날 때까지 실행 u 현재 loop를 빠져 나감 finish 현재 함수를 수행하고 빠져 나감 return 현재 함수를 수행하지 않고 빠져 나감 return 123 현재 함수를 수행하지 않고 빠져 나감, 리턴 값은 123 si 현재의 instruction을 수행, 함수 호출 시 함수 내부로 들어감. ni 현재의 instruction을 수행, 함수 호출 시 함수 내부로 들어가지 않음.
|
next |
다음 행을 수행한다. 서브루틴을 호출하면서 계속 수행한다. 호출이 발생하지 않으면 step와 같다. next n : 이를 n번 수행하라는 의미 n 현재 행 수행 후 멈춤, 함수 호출 시 함수 수행 후 다음 행으로 감 n 6 n을 6번 입력
|
run |
[프로그램 시작/종료] run/r 프로그램 시작 r arg1 arg2 arg1,arg2 를 인자로 프로그램 실행 run arg : 새로운 인수를 가지고 프로그램을 시작한다. arg는 “*”나 “[…]”를 포함할 수도 있다. 쉘의 사용까지도 확장될 수 있다. “<”,“>” , “>>”같은 입출력 방향 재지정기호도 또한 허용된다. |
step |
한 줄씩 실행 시킨다. 함수를 포함하고 있으면 함수 내부로 들어가서 한 줄씩 실행시킨다. - gdb 프로그램 진행 s 현재 행 수행 후 멈춤, 함수 호출 시 함수 내부로 들어감 s 6 s를 6번 입력 |
kill |
디버깅 중인 프로그램의 실행을 취소한다. |
list |
- gdb 소스 보기 list 2, 15 : 소스 파일의2 ~ 15 까지를 보여준다.
l 현재 함수를 기점으로 소스 출력 l 10 10행을 기준으로 출력 l func func 함수의 소스를 출력 l - 출력된 행의 이전 행을 출력 l file.c:func file.c 파일의 func함수 부분을 출력 l file.c:10 file.c 파일의 10행을 기준으로 출력
|
break |
- gdb breakpint b func func 심볼의 시작 부분에 breakpoint 설정 b 10 10행에 breakpoint 설정 b file.c:func file.c 파일의 func 심볼에 breakpoint 설정 b file.c:10 file.c 파일의 10행에 breakpoint 설정 b +2 현재 행에서 2행 이후 지점에 breakpoint 설정 b -2 현재 행에서 2행 이전 지점에 breakpoint 설정 b *0x8049000 0x8049000 주소에 breakpoint 설정 b 10 if var == 0 10행에 breakpoint 설정하는데, var 변수의 값이 0일 때 동작 rb fun* *fun* 에 해당하는 모든 심볼에 breakpoint 설정 rb ^fun fun 으로 시작하는 모든 심볼에 breakpoint 설정 rb TestClass:: TestClass에 해당하는 모든 심볼에 breakpoint 설정
break function : 현재 파일 안의 함수 function에 정지점을 설정한다. break file:function : 파일file안의 function에 정지점을 설정한다. watch : 감시점 설정(감시점은 어떤사건이 일어날 때에만 작동한다) until : 실행중 line까지 실행 |
watch |
- gdb watch point watch [변수명] 변수에 값이 써질 때, break 걸림 rwatch [변수명] 변수의 값을 읽을 때, break 걸림 awatch [변수명] 변수의 값을 읽거나 쓸 때, break 걸림
|
clear |
특정 라인이나 함수에 있던 정지점을 삭제한다. |
delete |
몇몇 정지점이나 자동으로 출력되는 표현을 삭제한다. |
|
next
print expr : 수식의 값을 보여준다. |
display |
- gdb display display [변수명] s/n 명령으로 진행하면서 변하는 변수값 확인
|
bt |
프로그램 스택을 보여준다. (backtrace) |
file |
file program : 디버깅할 프로그램으로서 파일을 사용한다. |
help |
명령에 관한 정보를 보여주거나 일반적인 정보를 보여준다. |
- gdb 변수/레지스터 값 검사
info locals 지역 변수 값 출력
info variables 전역 변수 값 출력
p [변수명] 변수의 값 출력
p [함수명] 함수의 주소 출력
p *[포인터변수명] 포인터변수의 내용을 출력
p $[register] register의 값 출력
info registers register 값 전체 출력
info all-registers MMX register를 포함해 거의 모든 register 값 출력
p *ptr_to_array@n 배열에 대한 pointer인 ptr_to_array에서 배열 원소의 수(n)를 입력으로 해서 출력
- gdb 변수 값 설정
p [변수명] = 값 변수명의 값을 설정
- gdb x
x/[범위][출력형식][범위의 단위]
메모리 특정 범위 확인
범위: 출력할 개수를 의미
범위의 단위: b(byte), h(half word = 2byte), w(word = 4byte), g(giant word = 8byte)
- gdb print/display/x 명령의 형식 지정
t 2진수로 출력
o 8진수로 출력
d 부호가 있는 10진수로 출력
u 부호가 없는 10진수로 출력
x 16진수로 출력
c 최초 1byte 값읅 문자옇으로 출력
f 부동소수점 값 형식으로 출력
a 가장 가까운 심볼의 오프셋을 출력
s 문자열로 출력
i 어셈블리 형식으로 출력
- gdb stack frame
frame [n] n번 stack frame 으로 변경
up 상위 stack frame 으로 이동
up [n] n번 상위 stack frame 으로 이동
down 하위 stack frame 으로 이동
down [n] n번 하위 stack frame 으로 이동
info frame stack frame 정보 출력
info args 함수가 호출될 때 인자를 출력
info locals 함수의 지역변수 출력
info catch 함수의 예외 핸들러를 출력
bt 전체 호출 stack frame 출력
- gdb 지원 함수들
disas [함수명] 함수의 어셈블리 코드 출력
call [함수명] 함수를 호출
signal [signal] 프로세스에 signal 전송
set {type}[addr]=[값] addr 주소를 type으로 인식하고 값을 저장
'gdb' 카테고리의 다른 글
[gdb]coredump 생성 및 분석 방법 (0) | 2021.04.07 |
---|---|
[GDB] display array(display *input@i) (0) | 2021.03.29 |
GDB help (0) | 2021.03.28 |
GDB란 ? (0) | 2021.03.28 |