본문 바로가기

CS

gdb

  • GDB는 리눅스 환경(정확히는 GNU 환경)에서 효율적으로 디버깅 할 수 있게 해주는 툴이다.

GNU 환경이란?

GNU(한국어: 그누)는 GNU 프로젝트를 통하여 개발한 유닉스 계열 컴퓨터 운영 체제이며 궁극적으로는 "완전한 유닉스 호환 소프트웨어 시스템"이 되는 것이 목표이다.[1][2] 리처드 스톨만이 1983년에 GNU 개발을 처음 시작하였으며 원래는 자유 소프트웨어 재단(FSF)의 중심이었지만 2010년 11월까지 GNU 안정판이 나오지는 않았다.[3][4] GNU는 "GNU는 유닉스가 아니다."란 의미를 갖는 영어 문장 "GNU's Not UNIX"의 약자로, 원래의 문장 안에 자신이 이미 들어 있는 재귀 약자이다. 스톨만은 GNU를 그누로 읽자고 제안한다. 유닉스는 이미 널리 쓰이던 독점 소프트웨어 운영 체제로, 유닉스의 아키텍처는 기술적으로 믿을만 한 것으로 증명되어 있어, GNU 시스템은 유닉스와 호환될 수 있도록 만들어졌다. 유닉스 아키텍처는 개별적인 요소들이 따로 따로 작성되는 것을 허용한다. 또, 이미 공개되어 있던 조판 소프트웨어 TeX나 X 윈도도 쓸 수 있는 장점이 있었다.

  • wikipedia
  • 쉽게말해 리눅스에서 쓰는 디버깅 툴이다.

gdb 사용법

  1. Compile with -g option
  2. $ g++ -g file.cpp -o file
    • 이런식으로 -g 를 넣어서 컴파일하면 gdb를 이용할 수 있다. 실제로 그냥 컴파일한 경우보다 파일 사이즈가 커진다.
  3. run gdb
  4. $ gdb ./file

이렇게 gdb를 실행하면 아래와 같은 창이 뜬다.

 

gdb 명령어

  • 이제 gdb가 실행되었으니 gdb 내의 명령어를 알아볼 차례이다. 아래의 명령어는 gdb를 사용하며 가장 기본이되는 명령어이고 사실 이 명령어들만 숙지한다면 디버깅을 하는 데 지장이 없을 것이다.
  • Run(r)
    • run은 프로그램을 break point가 걸릴 때 까지 실행시킨다.
  • Quit(q)
  • quit gdb
  • Break(b)
    • break point 를 원하는 장소에 걸 수 있다. 아래의 예시는 break point를 거는 다양한 방법을 보여준다.

 

  • Info b
    • 위의 예시에서 볼 수 있듯이 현재 걸려있는 break를 모두 보여준다.
  • Delete(d) #
    • break를 break의 number로 지워준다.
  • List(l)
    • 브레이크 걸린 시점부터 코드를 보여준다. 기본 10줄을 보여주고 line을 지정해서 볼 수 있다.
  • Next(n)
    • 코드를 라인 순서로 따라갈 수 있게 해주는 명령어이다.
  • Step(s)
    • 코드를 라인 순서로 따라가는 데 next와 차이점은 step은 함수를 call 할 시 해당 함수로 쫓아간다.
  • Finish(fin)
    • 현재 들어와있는 함수 혹은 stack frame이 return 할 때 까지 진행한다.
  • Backtrace(bt)
    • 현재 들어와있는 stack을 가장 밑바닥부터 보여준다. 호출된 함수를 순서대로 볼 수 있다.
  • Up
    • 현재 stack의 바로 위 stack으로 이동
  • Down
    • 현재 stack의 바로 아래 stack으로 이동
  • Info thread
    • 현재 돌고있는 thread의 상태를 전부 보여준다.

 

  • thread #
    • 위의 사진을 보면 6번 쓰레드 옆에 *모양이 있는 것을 볼 수 있는데 현재 브레이크 포인트가 6번 Thread에 걸려있는 것이다. 이 때 다른 thread의 상태를 보고싶다면 thread #을 이용할 수 있다.

 

 

'CS' 카테고리의 다른 글

Sync, Async vs Blocking, Non-Blocking  (0) 2022.06.01
리눅스 쉘과 명령어 기초  (0) 2019.09.30
Big-Endian, Little-Endian  (0) 2019.05.17