NAME

gdb - GNU 디버거

SYNOPSIS

gdb [-help] [-nh] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps]
    [-tty=dev] [-s symfile] [-e prog] [-se prog] [-c core] [-p procID]
    [-x cmds] [-d dir] [prog|prog procID|prog core]

DESCRIPTION

GDB 같은 디버거의 목적은 프로그램 실행 중에 그 "내부"에서 무슨 일이 일어나고 있는지를, 또는 프로그램이 죽는 순간에 뭘 하고 있었는지를 알 수 있게 해 주는 것이다.

GDB는 크게 다음 네 가지를 (그리고 이를 지원하며 다른 것들을) 해서 현장에서 버그 잡는 걸 돕는다.

GDB를 사용해 C, C++, Fortran, Modula-2로 작성된 프로그램을 디버그 할 수 있다.

셸 명령 "gdb"로 GDB를 실행한다. 시작하고 나면 GDB 명령 "quit"으로 나가라고 할 때까지 터미널에서 명령들을 읽어 들인다. "help" 명령을 쓰면 GDB 내장 도움말을 볼 수 있다.

아무 인자나 옵션 없이도 "gdb"를 실행할 수 있다. 하지만 GDB를 실행할 때 가장 흔한 방식은 인자 한 개나 두 개로 실행 프로그램을 지정하는 것이다.

gdb program

실행 프로그램과 코어 파일을 모두 지정해서 시작할 수도 있다.

gdb program core

또는 실행 중인 프로세스를 디버그 하고 싶다면 두 번째 인자로 프로세스 ID를 지정할 수 있다.

gdb program 1234
gdb -p 1234

그러면 GDB가 프로세스 1234에 붙게 된다. (단 1234라는 파일이 없어야 한다. GDB는 코어 파일을 먼저 확인한다.) -p 옵션을 쓰면 파일명 program을 생략할 수 있다.

다음은 자주 쓰는 몇 가지 GDB 명령들이다.

break [file:]function
(file 내의) function에 중지점을 설정한다.
run [arglist]
(arglist로) 프로그램을 시작한다.
bt
백트레이스. 프로그램 스택을 표시한다.
print expr
식의 값을 표시한다.
c
(중지점 등에서 멈춘 상태에서) 프로그램 실행을 계속한다.
next
(멈춘 상태에서) 프로그램 다음 행을 실행한다. 행에 함수 호출이 있으면 실행하고 지나간다.
edit [file:]function
현재 멈춰 있는 프로그램 행을 편집기로 본다.
list [file:]function
현재 멈춰 있는 곳 부근의 프로그램 텍스트를 표시한다.
step
(멈춘 상태에서) 프로그램 다음 행을 실행한다. 행에 함수 호출이 있으면 안으로 들어간다.
help [name]
GDB 명령 name에 대한 정보나 GDB 사용에 대한 일반적 정보를 표시한다.
quit
GDB에서 나간다.

GDB에 대한 자세한 내용은 Richard M. Stallman과 Roland H. Pesch의 Using GDB: A Guide to the GNU Source-Level Debugger를 보라. "info" 프로그램에서 "gdb" 항목으로 같은 내용을 볼 수 있다.

OPTIONS

옵션이 아닌 인자가 있으면 실행 파일과 코어 파일을 (또는 프로세스ID를) 지정하게 된다. 즉 연관된 옵션 플래그 없는 첫 번째 인자는 -se 옵션과 같으며 두 번째가 있고 파일 이름이면 -c 옵션과 같다. 여러 옵션들에는 긴 형태와 짧은 형태가 있다. 긴 형태는 다른 옵션과 구분이 가능하기만 하다면 일부만 입력하더라도 인식한다. (원한다면 옵션 인자에 - 대신 +를 붙일 수도 있지만 아래에선 일반적 관행을 따른다.)

모든 옵션과 명령행 인자들은 순차적으로 처리된다. -x 옵션 사용 시 순서에 따라 차이가 생긴다.

-help
-h
모든 옵션들을 간단한 설명과 함께 나열한다.
-symbols=file
-s file
파일 file에서 심볼 테이블을 읽어 들인다.
-write
실행 파일과 코어 파일로 쓰기를 할 수 있게 한다.
-exec=file
-e file
파일 file을 실행 파일로 사용해서 적절한 때에 실행하고 코어 덤프와 조합해서 초기 데이터를 알아내는 데 쓴다.
-se=file
파일 file에서 심볼 테이블을 읽어 들이고 실행 파일로 사용한다.
-core=file
-c file
파일 file을 코어 덤프로 사용해서 조사한다.
-command=file
-x file
파일 file에 있는 GDB 명령들을 실행한다.
-ex command
주어진 GDB 명령 command를 실행한다.
-directory=directory
-d directory
소스 파일 탐색 경로에 directory를 추가한다.
-nh
~/.gdbinit의 명령을 실행하지 않는다.
-nx
-n
초기화 파일 .gdbinit의 명령을 실행하지 않는다.
-quiet
-q
조용히 한다. 소개 및 저작권 메시지를 찍지 않는다. 배치 모드에서도 이 메시지들을 숨긴다.
-batch

배치 모드로 실행한다. -x로 지정한 명령 파일들 모두를 (그리고 금지하지 않았다면 .gdbinit을) 처리한 후에 상태 0으로 끝낸다. 명령 파일 내의 GDB 명령을 실행하다가 오류가 발생하면 0 아닌 상태 값으로 끝낸다.

GDB를 필터로 실행할 때, 예를 들어 다른 컴퓨터의 프로그램을 내려받아서 돌릴 때 배치 모드가 유용할 수 있다. 더 편리하도록 배치 모드로 돌 때는 다음 메시지를 찍지 않는다. (보통 때는 GDB 제어 하에서 도는 프로그램이 종료할 때마다 찍는다.)

Program exited normally.
-cd=directory
현재 디렉터리 대신 directory를 작업 디렉터리로 해서 GDB를 실행한다.
-fullname
-f
Emacs에서 GDB를 하위 프로세스로 실행할 때 이 옵션을 설정한다. GDB에서 스택 프레임을 표시할 때(프로그램이 멈출 때 포함)마다 전체 파일명과 행 번호를 표준적이고 인식 가능한 방식으로 출력하도록 한다. 그 인식 가능한 형식이란 \032 문자 두 개 다음에 파일 이름이 오고, 콜론으로 구분된 행 번호와 문자 위치가 오고, 개행이 오는 것이다. Emacs에서 GDB로의 인터페이스 프로그램에서는 \032 문자 두 개를 프레임 소스 코드를 표시하라는 신호로 쓴다.
-b bps
GDB에서 원격 디버깅에 쓰는 시리얼 인터페이스의 회선 속도(보드 속도, 즉 초당 비트)를 설정한다.
-tty=device
장치 device를 프로그램의 표준 입출력으로 사용해서 실행한다.

SEE ALSO

완전한 GDB 문서는 Texinfo 설명서 형태로 유지한다. "info"와 "gdb" 프로그램, 그리고 GDB의 Texinfo 문서가 올바로 설치돼 있다면 다음 명령으로 완전한 설명서를 볼 수 있다.

info gdb

Using GDB: A Guide to the GNU Source-Level Debugger, Richard M. Stallman and Roland H. Pesch, 1991년 7월.

Copyright (c) 1988-2018 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being "Free Software" and "Free Software Needs Free Documentation", with the Front-Cover Texts being "A GNU Manual," and with the Back-Cover Texts as in (a) below.

(a) The FSF's Back-Cover Text is: "You are free to copy and modify this GNU Manual. Buying copies from GNU Press supports the FSF in developing GNU and promoting software freedom."


2018-04-09