[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;
}


이 블로그의 인기 게시물

Crusader Kings 3 - Converting DNA code using Portrait Editor