{{위키데이터 속성 추적}}
{{다른 뜻 넘어옴|GDB}}
{{소프트웨어 정보
|이름 = GDB
|로고             = GDB Archer Fish by Andreas Arnez.svg
|화면             = GNU gdb 12.1 screenshot.png
|설명 = 
|개발자 = [[리처드 스톨만]]
| latest release version = {{wikidata|property|preferred|references|edit|Q464113|P348|P548=Q2804309}}
| latest release date    = {{wikidata|qualifier|preferred|single|Q464113|P348|P548=Q2804309|P577}}
| latest preview version = {{wikidata|property|preferred|references|edit|Q464113|P348|P548=Q51930650}}
| latest preview date    = {{wikidata|qualifier|preferred|single|Q464113|P348|P548=Q51930650|P577}}
|운영체제 = [[유닉스 계열]], [[마이크로소프트 윈도우|윈도우]]
|언어 = 
|플랫폼 = 
|종류 = 디버거
|라이선스 = [[GNU 일반 공중 사용 허가서]]
|웹사이트 = [http://www.gnu.org/software/gdb/ gnu.org/software/gdb/]
}}

보통은 '''GDB'''라고 부르는 '''GNU 디버거'''(GNU Debugger)는 [[GNU]] 소프트웨어 시스템을 위한 기본 [[디버거]]이다. GDB는 다양한 유닉스 기반의 시스템에서 동작하는 이식성있는 디버거로, [[에이다 프로그래밍 언어|에이다]], [[C언어|C]], [[C++]], [[포트란]] 등의 여러 [[프로그래밍 언어]]를 지원한다.

== 역사 ==
GDB는 [[1988년]]에서 [[리처드 스톨만]]이 처음 작성한 것으로, [[GNU 일반 공중 사용 허가서]]하에 배포되는 [[자유 소프트웨어]]이다.

1990년부터 1993년까지는 시그너스 솔루션즈에서 근무하는 [[존 길모어]]가 관리하였다.

== 기술적인 세부 사항 ==
=== 기능 ===
GDB는 [[컴퓨터 프로그램]]의 실행을 추적하고 수정할 수 있는 많은 기능들을 제공한다. 사용자는 프로그램의 내부 [[변수 (컴퓨터 과학)|변수]]들의 값을 주시하거나 변경할 수 있으며, 프로그램의 일반적인 실행 과정과 독립적으로 [[함수 (프로그래밍)|함수]]를 호출할 수도 있다.

GDB는 ([[2003년]] 현재) [[알파 프로세서|알파]], [[ARM 아키텍처|ARM]], [[H8/300]], [[시스템/370]], [[시스템 390]], [[X86]], [[IA-64]] "아이테니엄",
[[모토로라 68000]], [[MIPS 아키텍처|MIPS]], [[PA-RISC]], [[PowerPC]], [[SuperH]], [[SPARC]], [[VAX]]와 같은 다양한 머신들을 지원한다.

표준 릴리즈에 포함된 덜 알려진 대상 프로세서로는 [[A29K]], [[Advanced RISC Computing|ARC]], [[아트멜 AVR|AVR]], [[CRIS]], [[D10V]], [[D30V]], [[FR-30]], [[FR-V]], [[인텔 i960]], [[M32R]], [[모토로라 68HC11|68HC11]], [[모토로라 88000]], [[MCORE]], [[MN10200]], [[MN10300]], [[320xx 마이크로프로세서|NS32K]], [[Stormy16]], [[V850]], [[VAX]], [[자일로그 Z8000|Z8000]], [[EISC]]과 같은 것들이 있으며 이들 중에는 새 릴리즈에 포함되지 않은 것들도 있다.

GDB는 내부에 M32R이나 V850과 같은 거의 알려지지 않은 타겟 프로세서들에 대한 [[시뮬레이터]]도 포함하고 있다.

=== 원격 디버깅 ===
GDB는 임베디드 시스템을 디버깅할 때 사용되는 '원격' 모드를 지원한다. 원격 디버깅은 GDB가 한 머신 상에서 동작하고, 디버그할 프로그램은 다른 머신 상에서 동작하는 것을 말한다. GDB는 GDB 프로토콜을 알고 있는 원격지의 'stub'과 직렬 포트 혹은 TCP/IP를 통해 통신할 수 있다.

이 원격 디버깅 모드는 [[리눅스 커널]]에 사용되는 소스 수준의 디버거인 [[KGDB]]에서도 사용된다. KGDB를 사용하면 커널 개발자는 일반 응용 프로그램과 마찬가지로 커널을 디버깅할 수 있다. KGDB는 커널 코드내에 중단점을 삽입하는 것이 가능하며, 코드를 한 단계씩 실행(step)시키거나, 변수의 값을 관찰하는 것이 가능하다. 하드웨어 디버깅 레지스터를 포함하고 있는 프로세서에서는 감시점(watchpoint)을 설정하여 특정 메모리 주소가 접근되거나 실행될 때 [[중단점]]을 설정할 수 있다. KGDB는 디버깅할 머신에 [[직렬 케이블]]이나 [[이더넷]]을 통해 연결될 또 다른 머신을 필요로 한다. [[FreeBSD]]에서는 [[IEEE 1394|파이어와이어]] [[기억 직접 접근|DMA]]를 이용한 디버깅도 가능하다.

=== 제한 사항 ===
GDB는 자체적인 [[그래픽 사용자 인터페이스|GUI]]를 포함하고 있지 않으며 기본적으로 [[명령행]] 인터페이스를 사용한다. [[데이터 디스플레이 디버거|DDD]], [[GDBk]]/[[Insight]]와 같은 몇 가지 프론트엔드들이 있으며, [[Emacs]]에서도 "GUD"모드를 지원한다. 이들은 [[통합 개발 환경]]에서 제공하는 것과 비슷한 디버깅 기능들을 제공한다.

[[메모리 누수]] 탐지기와 같이 GDB와 연동하여 사용할 수 있는 툴들도 존재한다.

== 명령어 사용 예 ==
 gdb prog.out      prog.out를 디버깅..
 gdb > run         프로그램 실행

== 예제 ==

<pre>
GNU gdb Red Hat Linux (6.3.0.0-1.21rh)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".

(gdb) run
Starting program: /home/sam/programming/crash
Reading symbols from shared object read from target memory...done.
Loaded system supplied DSO at 0xc11000
This program will demonstrate gdb

Program received signal SIGSEGV, Segmentation fault.
0x08048428 in function_2 (x=24) at crash.c:22
22 return *y;
(gdb) edit
(gdb) shell gcc crash.c -o crash -gstabs+
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
warning: cannot close "shared object read from target memory": File in wrong format
`/home/sam/programming/crash' has changed; re-reading symbols.
Starting program: /home/sam/programming/crash
Reading symbols from shared object read from target memory...done.
Loaded system supplied DSO at 0xa3e000
This program will demonstrate gdb
24
Program exited normally.
(gdb) quit
</pre>

먼저 프로그램을 실행시키고 세그먼트 폴트의 원인을 찾은 후에 올바른 동작을 하도록 수정(edit)하였다. 수정된 프로그램은 [[GNU 컴파일러 모음|GCC]]를 통해 다시 컴파일된 후 실행되었다.

== 같이 보기 ==
* [[바이너리 파일 디스크립터 라이브러리]]
* [[데이터 디스플레이 디버거]]
* [[Gdbserver]]
* [[LLDB (디버거)]]
* [[리처드 스톨먼]]
== 참고 문헌 ==
{{위키공용분류}}
* [[리처드 스톨만|Richard M. Stallman]], [[Roland Pesch]], [[Stan Shebs]], et al., ''Debugging with GDB'' ([[자유 소프트웨어 재단]], 2002) {{ISBN|1-882114-88-4}}
{{각주}}

== 외부 링크 ==
* [http://www.gnu.org/software/gdb/ GDB 홈페이지]
* [http://sources.redhat.com/gdb/current/onlinedocs/gdb.html gdb 문서: "Debugging with GDB"] {{웨이백|url=http://sources.redhat.com/gdb/current/onlinedocs/gdb.html |date=20120707130759 }} (html 과 400 페이지 이상의 PDF로 제공)
* [https://web.archive.org/web/20080616054054/http://sources.redhat.com/gdb/current/onlinedocs/gdbint.html GDB Internals]
* [https://web.archive.org/web/20071017044810/http://users.actcom.co.il/~choo/lupg/tutorials/debugging/debugging-with-gdb.html GDB 강좌]
* [https://web.archive.org/web/20130517035414/http://kgdb.linsyssoft.com/ kgdb, 리눅스 커널을 디버깅하기 위한 gdb 백엔드]
* [https://web.archive.org/web/20061004141706/http://www.dirac.org/linux/gdb/ Peter Jay Salzman's excellent GDB guide]
* [https://web.archive.org/web/20100829051021/http://kldp.net/projects/mygdb/ GDB를 GUI로 쉽게 조작하는 프론트엔드 프로그램 MyGDB]

{{GNU}}

{{전거 통제}}

[[분류:디버거]]
[[분류:GNU 프로젝트 소프트웨어|디버거]]