[Linux] GDB (GNU Debugger) 사용하기 - 2
- Break Point 걸기 및 코드 실행하기
우선 예제파일을 먼저 만들어 봅시다.
0부터 N 까지 더해주는 프로그램입니다. 인자를 받지 않을 경우 디폴트값으로 10을 사용하게 됩니다.
// sum.c
int main(int argc, char **argv)
{
int i, sum = 0;
int value = 10U;
if(argc > 1)
{
value = strtol(argv[1], NULL, 10);
}
for(i = 0; i <= value; i++)
{
sum += i;
}
printf("SUM = %d\n", sum);
return sum;
}
컴파일 해 봅시다.
gcc -g sum.c -o sum
gdb로 sum 실행 파일을 오픈 합니다.
gdb sum
list 커맨드를 입력하여 소스코드와 라인넘버를 확인 해 봅시다.
10줄이 나오는데, Enter 키를 눌러 주면 끝까지 나옵니다.
브레이크 포인트를 걸고 싶은 곳에 'break' 명령어와 라인넘버를 입력합니다.
(gdb) break [라인넘버]
예를들어 6번, 9번, 19번 라인에 브레이크 포인트를 걸고 싶으면, 다음과 같이 입력합니다.
('break' 대신 약자로 'b' 만 입력 해도 됩니다.)
브레이크 포인트가 어디에 걸려있는지 중간에도 확인 할 수 있습니다.
(gdb) info break
약자로 'i b' 만 입력 해도 됩니다.
run 커맨드를 입력해서 브레이크 포인트가 잡히는지 확인 해 봅시다.
다음 브레이크 포인트 까지 실행 하고 싶다면, 'continue' 커맨드를 입력합니다.
(약자로 'c' 만 입력 해도 됩니다.)
만약 다음 브레이크 포인트가 없다면, 끝 까지 실행 됩니다.
만약 브레이크 포인트가 잡힌 곳에서 다음 라인으로 넘어가고 싶다면 'next' 커맨드 또는 약자로 'n'을 입력 하면 됩니다.
또는 그냥 엔터키만 입력해도 다음 라인이 실행 됩니다.
- Break Point 삭제 하기
브레이크 포인트를 삭제 하려면 'delete' 커맨드 (또는 약자 'd') 를 사용 하면 되는데,
커맨드 단독으로 입력하면 모든 브레이크 포인트가 삭제 되며,
특정 브레이크 포인트를 지우기 위해서는 커맨드 인자로 라인넘버가 아니라 브레이크 포인트 테이블의 Num 에 등록된 숫자를 입력 해야 합니다.
- Step into
위 'next' 커맨드는 한줄 씩 실행하게 되는데, 브레이크 포인트를가 함수 호출 라인에 걸렸을 때, 그 함수 안으로 들어 가려면 'step 커맨드를 사용하면 됩니다. (역시 약자로 's' 만 입력 해도 됩니다.)
// step.c
#include <stdio.h>
void func1(void)
{
int value = 1;
printf("func 1\n");
printf("value = %d\n", value);
}
int main(void)
{
printf("[Main] Start\n");
func1();
printf("[Main] End\n");
return 0;
}