http://coffeenix.net/doc/develop/gdb.html
http://www.gnu.org/software/gdb/
GDB 사용법
gdb는 GNU에서 만든 디버거로 굉장히 단순하고 직관적인 디버거다.
bugprg.c를 작성하고 컴파일 한다.
$ gcc -g -o bugprg bugprg.c
gdb를 사용하여 디버깅하기 위해서는 위 명령어와 같이 -g 옵션을 붙여야 한다.
-g 옵션을 붙이게 되면 컴파일되는 실행 파일에 여러 디버깅 정보가 삽입된다.
gdb 시작, 종료
실행 방법
$ gdb bugprg
$ gdb bugprg core.14998
$ gdb bugprg 14998
종료 방법
$ q
Ctrl + d
소스 보기
$ l : main 함수 기점
$ l 10 : 10행 기준
$ l func : func 함수
$ l file.c:func : file.c 파일의 func 함수
$ l file.c:10 : file.c 파일의 10행
출력되는 행의 수 변경
$ set listsize 20
브레이크 포인트
프로그램 실행
$ r
스택을 백트레이스
$ bt
브레이크 포인트 걸기
$ b func
$ b 10
$ b +2 : 현재 행에서 2개 행 이후
$ b -2 : 현재 행에서 2개 행 이전
$ b *0x8049000
$ b 10 if var == 0 : var 변수 값이 0일 때 브레이크
브레이크 포인트 지우기
$ cl func
$ cl 10
$ d : 모든 브레이크 포인트 지움
현재 설정된 프레이크 포인트 보이기
$ info breakpoints
프로그램 수행
$ r
$ r arg : arg 인자로 프로그램 수행
프로그램 종료
$ k
진행 명령어
$ s : 현재 행 수행 후 정지, 함수 호출 시 함수 내부로 들어감
$ n : 현재 행 수행 후 정지, 함수 호출 시 함수 수행 후 다음 행으로 감
$ c : 브레이크 포인트를 만날 때까지 계속 진행
$ u : 현재 루프를 빠져 나감
$ finish : 현재 함수를 수행하고 빠져 나감
$ return : 현재 함수를 수행하지 않고 빠져 나감
$ return 123 : 함수 수행 않고 리턴 값은 123
예 제
#include <stdio.h>
int main() { int score; char grade = 'X'; printf("Please enter examination score: "); scanf("%d", &score); if((100>=score)&&(90<=score)) { grade ='A'; } else if((90>score)&&(80<=score)) { grade='B'; } else if((80>score)&&(70<=score)) { grade='C'; } else if((70>score)&&(60<=score)) { grade='D'; } else if((60>score)&&(0<=score)) { grade='F'; } else { printf("Wrong Score \n"); } printf("The grad is %c\n", grade); } |
1. 컴파일후 실행
2. 브레이크 포인트 찾기위해 라인 출력
3. 포인트 지정 및 디버깅 시작
'기초 > C' 카테고리의 다른 글
분할컴파일 (0) | 2011.05.11 |
---|---|
c언어 포인터의 자료별 접근 (0) | 2011.05.09 |
포인터 형변환 (0) | 2011.05.06 |
포인트 안쓰고 포인트사용하기 (0) | 2011.05.06 |
for 문 (1) | 2011.05.03 |