본문 바로가기
프로그래밍/CS

[유닉스] gdb 디버거 정리

by 엽기토기 2020. 12. 23.
반응형

[gdb 디버거]
 
디버거 사용하는 목적
특정 시점에서의 메모리 값과 레지스터 값을 확인하기 위함. 오류찾기
 
gdb?
GNU에서 만든 매우 강력한 디버거
 
gdb 사용하기 위해서는 g 옵션을 붙여야한다 (디버깅 정보 삽입)
: gcc g o a a.c
 
-디버깅 정보란?
내부에 사용된 심볼 문자열과 심볼의 주소, 컴파일에 사용된 소스 파일, 컴파일된 각각의 인스트럭션들이 어떤 소스파일의 어떤 행에 해당되는지에 대한 정보 등을 말함.
   
*기본 명령어

gdb 실행 : gdb 실행파일명
gdb 종료 : q 또는 Ctrl + d
소스보기 : l (기본 10행 출력)
나머지 부분 보려면 다시 l이나 enter
특정행 보기: l 행번호
출력된 행 이전행 보기 : l -
특정 함수부분 보기 : l 함수명
다른 파일 함수 보기 : l 파일명:함수명
출력 행 수 20으로 늘리기 : set listsize 20
 
r : gdb에서 프로그램 실행
k : 종료 (실행중일 때)
s : 현재 행 수행 후 멈춤, 함수 호출시 함수 내부로 들어감
현재 행 수행 후 멈춤, 함수 호출시 함수 수n : 행 후 다음행으로 감
c : 다음 브레이크 포인트를 만날 때까지 계속 진행
u : 현재 loop 빠져 나감
finish : 현재 함수를 수행하고 빠져나감
return : 현재 함수를 수행 안하고 빠져나감

<백트레이스>
현재 수행 코드까지 어떤 함수들의 호출이 있었는지 프로그램의 스택 프레임을 순차적으로 따라가면서 해석해서, 각 함수를 호출할 때 인자는 무엇인지 확인 하는 것
명령 : bt
 
<브레이크 포인트>
브레이크 포인트를 설정한 부분에서 프로그램 수행이 멈춤.
브레이크 포인트는 여러 개 설정 가능함. 이 때 프레이크 포인트에 고유번호가 매겨짐.
 
-브레이크 포인트 사용 이유
문제되는 함수의 인자 값이 언제 넘어가는 지를 확인하기 위해
 
*설정 명령어
 
b func
func 함수의 시작부분에 브레이크 포인트 설정
 
b 10
10행에 브레이크포인트 설정
 
b file.c:func
file.c 파일에 func함수에 브레이크 포인트 설정
 
b file.c:10
file.c 파일에 10행에 브레이크 포인트 설정
 
b +2
현재 행에서 2개 행 이후 브레이크 포인트 설정
 
b -2
현재 행에서 2개 행 이전 지점에 브레이크 포인트 설정
b *0x8049000
특정 주소에 브레이크 포인트 설정
 
b 10 if var ==0
10행에 브레이크포인트를 설정하는데 var 값이 0일 때 작동
 
rb fun*
*fun*에 해당하는 모든 심볼에 브레이크 포인트 설정
 
rb ^fun
fun으로 시작하는 모든 심볼에 브레이크 포인트 설정
 
rb TestClass::
TestClass에 해당하는 모든 심볼에 브레이크 포인트 설정
 
*지우기 및 상태 변경
   
cl func
func 함수의 시작부분에 브레이크 포인트 지움
 
cl 10
10행에 브레이크포인트 지움
 
cl file.c:func
file.c 파일에 func함수에 브레이크 포인트 지움
 
cl file.c:10
file.c 파일에 10행에 브레이크 포인트 지움
 
d
모든 브레이크 포인트를 지움
 
disable br
모든 브레이크 포인트 비활성화
 
disable br 1
1번 브레이크 포인트 비활성화
 
disable br 1 3
1, 3번 브레이크 포인트 비활성화
 
enable br
모든 브레이크 포인트 활성화
 
enable br 1
1번 브레이크 포인트 활성화
 
enable br once 1
1번 브레이크 포인트 1번만 활성화, 후 비활성화
 
<와치 포인트>
어떤 변수 값이 바뀔 때마다 브레이크를 걸기 위한 명령
watch 변수명 (변수값이 써질 때)
rwatch 변수명 (읽혀질 때)
awatch 변수명 (써질 때 읽혀질 때)
 
<변수, 레지스터 값 검사>
info locals : 현재 상태에서의 지역변수와 각각의 값이 출력됨.
info variables : 전역변수 리스트와 표준 C 라이브러리의 심볼들이 출력됨.
 
p 변수명 : 변수 값 출력
p 함수명 : 함수 주소

p/출력형식 변수명 : 출력형식으로 출력 (기본은 10진수)

(출력 형식)
t; 2진수, o: 8진수, x: 16진수
d: 부호 있는 10진수, u : 부호 없는 10진수
c: 최소 1바이트 값을 문자형으로
f: 부동소수점

p’파일명‘::변수명 : 파일 내 전역변수 값
p 함수명::변수명 : 함수 내 변수 값
(변수명이 중복될 때는 기본적으로 지역변수가 출력됨.)
 
p 변수명@배열크기 : 변수 내용을 변수 배열의 크기 형태로 출력
p *포인트명 : 포인트 타입 변수 출력
p *포인트명@숫자 : 구조체 배열의 내용
 
p $레지스터명 : 레지스터의 값 출력
info registers : 레지스터 값 전체 출력
 

반응형