본문 바로가기

C++/g++

gdb 사용 방법 (기초)

[1. 개요]

리눅스 C++ application 디버깅 시, 유용한 툴 인 gdb 의 기초적인 사용 방법을 정리한다.

 

기본적으로 breakpoint 를 걸고, 한줄 단위로 실행해보기 위해서 디버깅 심볼들이 필요하다.

따라서, CMake 기준에서는

  • 최적화를 많이 하는 Release 빌드 보다는 Debug 빌드가 적합하다.

아래와 같이, gdb 실행 시 심볼들을 찾을 수 없다는 메시지가 출력 된다.

 

g++ 로 직접 빌드하는 경우라면, -g 옵션을 사용하고, 최적화는 하지 않도록 한다.


[2. 기본적인 실행]

     1  #include <iostream>
     2
     3  int sum(const int a, const int b)
     4  {
     5          const int aa = a*a;
     6          const int bb = b*b;
     7
     8          return aa+bb;
     9  }
    10
    11
    12  int main(int argc, char** argv)
    13  {
    14          if (argc > 1) {
    15                  std::cout << argv[1] << std::endl;
    16          }
    17
    18          std::cout << "Hello world" << std::endl;
    19
    20          const int result1 = sum(3, 4);
    21          const int result2 = sum(4, 5);
    22          const int result3 = sum(5, 6);
    23          const int result4 = sum(6, 7);
    24
    25          std::cout << result1 << std::endl;
    26          std::cout << result2 << std::endl;
    27          std::cout << result3 << std::endl;
    28          std::cout << result4 << std::endl;
    29
    30
    31          return 0;
    32  }

 

CMake 기준 위 코드를 Debug 로 빌드한다. (실행파일 이름은 Mydbg 라 가정한다.)

 

$ gdb Mydbg

Release 와 다른 문구 확인 가능

 

(gdb) run abcd

command : r

- 디버깅 시작.

- run

- run <arg1> <arg2> ...  

 

(gdb)

 

 


[3. 정리]

$gdb <exe>


(gdb) r

  • run
  • r <arg1> <arg2> ...

(gdb) b

  • break
  • b <함수이름> #함수 이름만 명시...
  • break <파일이름:라인넘버>
  • break <파일이름:함수이름>

(gdb) info

  • info break

(gdb) n

  • next
  • 한줄 실행 (step over)


(gdb) s

  • step
  • 한줄 실행 (step into)


(gdb) q

  • quit
  • 종료


(gdb) p

  • print <변수명>


(gdb) c

  • continue
  • 다음 breakpoint 까지 실행


(gdb) d

  • delete # 모든 breakpoint 를 삭제
  • delete <번호> # breakpoint 번호에 해당하는 breakpoint 만 삭제


(gdb) display

  • display <변수명> # print 와 달리, 해당 변수를 계속 출력

'C++ > g++' 카테고리의 다른 글