[Linux] GDB (GNU Debugger) 사용하기 - 5

 

  • 코드 라인 추적하기
(gdb) backtrace

backtrace (약자 'bt') 커맨드를 사용하면 프로그램이 중단 되었을 때 또는 현재 실행 중인 코드 위치를 확인 할 수 있습니다.

고의적으로 문제를 유발하는 코드를 작성 해 봅시다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* str;

void allocate(void)
{
        str = (char*)malloc(sizeof(char) * 10);
}

void deallocate(void)
{
        free(str);
        free(str); // -> 에러 발생을 위해 free를 2번 호출 하였습니다.
}

void assign(void)
{
        strcpy(str, "Hello World");
}

int main(void)
{
        printf("Start\n");

        allocate();
        assign();
        printf("str = %s\n", str);

        deallocate();

        printf("End\n");

        return 0;
}


gdb 로 오픈하고, run 커맨드를 입력하면 프로그램이 뻗게 되는데, 이 상태에서 backtrace 커맨드를 입력 해 봅시다.

어떤 문제로 죽었고, 어디에서 유발시켰는지 알려줍니다.



이 블로그의 인기 게시물

Crusader Kings 3 - Converting DNA code using Portrait Editor