본문 바로가기
멀티코어 프로그래밍/Basic

GDB 명령어

by 기리의 개발로그 2022. 3. 27.

GDB

 

 

GDB

GDB GDB란 GNU Debugger의 약자이며 다음과 같은 특징이 있다. C/C++ 디버거 프로그램 시작, 멈춤 및 수행 도중 조작 가능 변수 값 변경 및 추적 함수 스택 관리 코드 분석 프로그램 수행 과정 추적 프로

ypangtrouble.tistory.com

명령어

l (list)

  • 현재 실행중인 라인을 포함하여 소스 코드 10줄 출력
    • 현재 실행중인 라인을 기준으로 중앙에 표시
    • l (list) - : 이전 10줄의 코드 출력
  • l (list) [line number]
    • line number에 해당하는 소스 코드의 줄을 기준으로 10줄 출력
  • l (list) [function name]
    • 해당 함수를 찾아 함수의 시작 지점을 기준으로 10줄 출력
  • set listsize [number]
    • 출력되는 소스 코드의 행 수를 number로 변경

r (run)

  • gdb는 바이너리 파일을 로드하지만 실행시키지는 않음.
  • 프로그램을 실행하는 명령어
    • r ([arg1][arg2] …)

b (break)

  • 프로그램의 실행 중단 지점 설정
    • 현재 실행 중인 라인에 중단 지점 설정
  • 줄 번호, 함수 등 중단 지점을 자유롭게 설정 가능
  • gdb에서 프로그램 실행 중 중단 지점을 만나면 프로그램 실행을 중지
  • b (break) [line number]
    • 현재 소스의 특정 라인에 중단지점 설정
  • b (break) [function name]
    • 현재 소스이 특정 함수에 중단지점 설정
  • b (break) [line or func] if [condition]
    • 조건부 중단지점 설정
    • 특정 라인 혹은 함수에서 condition을 만족하면 프로그램 실행 중지
  • clear / delete 명령어로 중단지점 삭제 가능

info b (break)

  • breakpoint 의 목록 확인

d [num]

  • 해당 num의 breakpoint 를 삭제하는 명령어

c (continue)

  • 중단된 현재 프로그램의 실행을 계속 진행
    • 프로그램 실행 도중 중단 지점에 도달하면 프로그램 실행 중지
    • 프로그램 실행 도중 종료되면 프로그램 종료
  • 중단지점 설정 후 중단지점에 도달하기 위해 주로 사용

n (next)

  • 프로그램의 다음 행을 실행하는 명령어
    • 단 하나의 행을 실행한 후 프로그램 실행을 중지
  • 버그가 있는 부분을 찾아낼 때 유용하게 사용
    • next 를 통해 프로그램을 줄 단위로 실행
  • 현재 정지되어 있는 줄을 실행한 후 다음 줄 실행 이전에 정지
  • 함수 내부로 진입하지 않고 함수를 실행
    • 함수 내부에 버그가 있는 경우 확인 불가능
    • 함수 내부에 무한 루프가 실행되는 경우 gdb로 돌아오지 않음
    • s (step) 명령어를 통해 해결 가능
  • n (next) [line number]
    • [line number] 만큼의 줄을 한 번에 실행

p (print)[expression]

  • expression의 결과를 출력
  • expression은 다음과 같을 수 있음
    • 단일 변수
      -> 단일 변수의 값 출력
    • 변수를 포함한 수식
      -> 해당 수식의 계산 결과 출력
    • 함수
      -> 호출된 함수가 반환하는 값 출력
  • #define으로 선언된 매크로는 확인 불가능

where

  • 현재 실행중인 프로그램에서 함수의 호출상태를 볼 수 있음
  • main 함수부터 시작해서 호출된 함수를 보여주며, 이 목록을 call stack 이라 함

up [num]

  • call stack 에서 상위 함수의 위치로 이동
  • num에 써진 숫자만큼 상위로 이동하고, num이 없으면 1만큼 이동
  • 상위 함수로 이동하면 프로그램 내 현재 위치가 상위 함수에 있는 것처럼 변수 등을 출력할 수 있음

down [num]

  • call stack 에서 하위 함수의 위치로 이동
  • up과 반대로 이동을 하고 그 외 특성은 같음

frame [num]

  • stack frame의 정보를 출력하는 명령어
  • where 명령어로 출력된 call stack 의 맨 앞에 있는 숫자를 num으로 주면, 그에 맞는 frame의 정보를 출력
  • num을 주지 않으면 현재 선택되어 있는 frame의 정보를 출력
    • 처음 frame 명령어 실행 시 0번
  • 함수 이름, 아규먼트, 파일명, 행 번호 등을 출력

select-frame [num]

  • frame을 선택하는 명령어
  • 단독으로 쓰이지 않고, frame 관련 명령어에서 frame 번호를 지정해줄 때 사용

info frame [num]

  • 현재 선택되어 있는 frame의 자세한 정보를 보여줌
  • 함수 이름, 아규먼트, 파일명, 행 번호 외에 레지스터의 값들을 보여줌
  • num을 주지 않으면 select-frame으로 선택된 frame의 정보를 보여줌
반응형

'멀티코어 프로그래밍 > Basic' 카테고리의 다른 글

Make / Makefile  (41) 2022.03.30
gcc 컴파일러  (13) 2022.03.29
프로파일링  (13) 2022.03.28
GDB  (6) 2022.03.26
병렬성  (0) 2015.07.20

댓글