반응형

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 test

 

-종료 

(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

[프로그램 시작/종료]
프로그램을 시작한다.(break가 있다면 break까지 실행)

run/r 프로그램 시작 

r arg1 arg2 arg1,arg2 를 인자로 프로그램 실행

run arg : 새로운 인수를 가지고 프로그램을 시작한다.

arg는 “*”나 “[…]”를 포함할 수도 있다.

쉘의 사용까지도 확장될 수 있다.

“<”,“>” , “>>”같은 입출력 방향 재지정기호도 또한 허용된다.

step

한 줄씩 실행 시킨다.

함수를 포함하고 있으면 함수 내부로 들어가서 한 줄씩 실행시킨다.

- gdb 프로그램 진행

s 현재 행 수행 후 멈춤, 함수 호출 시 함수 내부로 들어감

s 6 s를 6번 입력

kill

디버깅 중인 프로그램의 실행을 취소한다.
k 프로그램 종료

list

- gdb 소스 보기
현재 위치에서 소스 파일의 내용을 10줄 보여준다                          

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

몇몇 정지점이나 자동으로 출력되는 표현을 삭제한다.

print

next

print expr : 수식의 값을 보여준다.

display

- gdb display

display [변수명] s/n 명령으로 진행하면서 변하는 변수값 확인


현재 display된 명령의 목록을 보여준다.

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

+ Recent posts