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. 포인트 지정 및 디버깅 시작