{{위키데이터 속성 추적}}
'''디버거'''({{llang|en|debugger}}) 또는 '''디버깅 도구'''({{lang|en|debugging tool}})는 다른 대상 프로그램을 테스트하고 [[디버그]]하는 데 쓰이는 [[컴퓨터 프로그램]]이다. 검사받는 코드는 [[명령어 집합 시뮬레이터]] (ISS: Instruction set simulator) 위에서 돌아감으로 인해 특정한 조건에서 멈출 수 있는 강점을 갖지만, 직접 프로세서에서 실행될 때 보다는 느려진다. 몇몇 디버거들은 이 효과를 제한하기 위해 동작의 두 가지 모드를 제공하는데, 전체 또는 부분적 시뮬레이션이 그것이다.

[[소프트웨어 버그]]나 유효하지 않은 값에 의해서 프로그램이 정상적으로 진행되지 않는 것을 [[트랩]]이라고 한다. '''소스 레벨 디버거''' 또는 '''심볼릭 디버거'''의 경우 프로그램이 트랩되거나 정해진 조건에 도달하면, 디버거는 원본 코드에서의 위치를 보여준다. 요즘에는 대부분의 [[통합 개발 환경]]에서 볼 수 있다. 만약 '''로우 레벨 디버거''' 또는 '''기계어 디버거'''라면 이것은 디스어셈블리에서의 위치를 보여준다.

== 특징 ==
전형적인 디버거들은 자신의 고수준에서 쿼리 프로세스, 심볼 리졸버, 표현식 해석기 그리고 디버그 지원 인터페이스를 제공한다. 또한 프로그램을 차례로 실행하는 ('''single stepping''' 또는 [[프로그램 애니메이션]]), 멈추게 하는 ('''breaking''') ([[브레이크포인트]]를 사용해서) 그리고 변수의 값을 추적하는 것 같은 좀 더 복잡한 함수들을 제공한다. 몇몇 디버거들은 실행 중인 프로그램의 상태를 수정하는 기능도 갖는다. 또한 논리적 에러나 충돌 시 다른 위치에서 실행을 계속할 수 있다.

버그를 제거하는 데 유용한 이 기능들은 또한 [[복사 방지]], [[디지털 권리 관리]] 그리고 다른 소프트웨어 보호를 회피하는 [[소프트웨어 크래킹]] 툴로서 사용되기도 한다. 특히 [[명령어 경로 길이]] (Instruction path length)가 보이는 경우, 이것은 또한 일반 검사 툴, [[프로파일링 (컴퓨터 프로그래밍)| 성능 분석기]]로서 사용되는 경우도 있다.

대부분의 주류 디버깅 엔진들은 (gdb나 dbx 같은) 콘솔 기반의 [[명령 줄 인터페이스]]를 제공한다. 디버거 프론트 엔드는 디버거 엔진의 대중적인 확장들이다.

==={{앵커|역디버깅}}역디버깅===
몇몇 디버거들은 '''역디버깅'''이라고 불리는 기능을 포함한다. 이러한 디버거들은 프로그램의 실행을 되돌리는 것을 가능케 한다. 다양한 디버거들이 이 기능을 포함한다. [[마이크로소프트 비주얼 스튜디오]] 디버거는 C#, 비주얼 베이직, .NET 등에 대해서는 이 기능을 지원하지만, C++에 대해서는 지원하지 않는다. 물론 C, C++, 자바, 파이썬 등에 대한 역디버거도 존재한다. 역디버거는 특정한 종류의 문제에 매우 유용하지만 아직은 보편적으로 사용되고 있지 않다.

== 메모리 보호 ==
디버거들은 또한 [[버퍼 오버플로]] 같은 [[저장소 침입]]을 피하기 위한 메모리 보호를 포함하기도 한다. 이것은 메모리가 메모리 "풀"에서 동적으로 할당되는 [[트랜잭션 처리]] 환경에서 매우 중요하다.

== 디버깅을 위한 하드웨어 지원 ==
대부분의 현대 마이크로프로세서들은 적어도 한 개 이상의 디버깅을 쉽게 만들어 주는 특징을 자신의 [[프로세서 디자인]]에 갖고 있다.
* [[트랩 플래그]] 같은 프로그램을 차례로 실행하기 위한 하드웨어 지원
* [[포펙과 골드버그의 가상화 요구]]를 충족시키는 명령어 집합은 디버깅 되는 소프트웨어로서 같은 프로세서에서 돌아가는 디버거 소프트웨어를 작성하는 것을 쉽게 해준다. 이러한 CPU는 테스트 시에 프로그램의 내부 루프를 실행할 수 있다. 그리고 계속 디버거의 제어 아래에 남는다.
* [[인 시스템 프로그래밍]]은 외부 하드웨어 디버거가 테스트 중에 시스템을 재프로그래밍하게 해준다. (예를 들면, 브레이크포인트 추가나 제거 같은) 이러한 ISP를 지원하는 많은 시스템들은 또한 다른 하드웨어 디버그 지원을 갖는다.
* 하드웨어는 주소 비교기, 데이터 값 비교기, [[페이지 부재]] 하드웨어 같은 코드와 데이터 브레이크포인트를 지원한다.

== 디버거 프론트엔드 ==
몇몇 유명한 디버거들은 단지 CLI로 구현된다. 개발자들은 GUI를 통해 더 쉽고 효율적인 디버깅을 고려한다. 이것은 시각적인 프론트-엔드의 이유이다. 대부분의 GUI 디버거 프론트-엔드가 특정한 디버거를 대상으로 삼는데 반해, 어떤 것들은 여러 CLI 디버거들을 대상으로 삼는다.

== 디버거 목록 ==
[[파일:Winpdb-1.3.6.png|섬네일|250px|[[Winpdb]]가 자신을 디버깅하는 모습.]]
{{소프트웨어 개발 프로세스}}
* AppPuncher 디버거 — - [[리치 인터넷 애플리케이션]] 디버깅
* [[AQtime]]
* [[CA/EZTEST]] — [[CICS]] 인터랙티브 테스트/디버그 소프트웨어 패키지
* [http://charm.cs.uiuc.edu/research/parallel_debug/ CharmDebug] — [[Charm++]]용 디버거
* [[코드뷰]]
* [[dbg|DBG]] — PHP 디버거 및 프로파일러
* [[dbx 디버거|dbx]]
* [[데이터 디스플레이 디버거|DDD]] (데이터 디스플레이 디버거)
* [[Allinea Distributed Debugging Tool|분산 디버깅 툴]] (Allinea DDT)
* DDTLite — Allinea DDTLite (비주얼 스튜디오 2008용)
* [[debug (명령어)|DEBUG]] — DOS 및 마이크로소프트 윈도우에 기본 내장된 디버거
* [http://www.mydebugger.com 디버거 (MySQL용)]
* [[오페라 드래곤플라이]]
* [[다이내믹 디버깅 테크닉]] (DDT), 및 [[옥털 디버깅 테크닉]](Octal Debugging Technique)
* [[이클립스]]
* [[임베디드 시스템 디버그 플러그인 포 이클립스]](Embedded System Debug Plug-in for Eclipse)
* [[퓨전디버그]]
* [https://web.archive.org/web/20110711125753/http://www.gremedy.com/gDEBuggerCL.php gDEBugger] OpenGL, OpenGL ES, [[OpenCL]] 디버거 및 프로파일러
* [[GNU 디버거]] (GDB), [[GNU 바이너리 유틸리티|GNU Binutils]]
* [http://code.google.com/p/hyperdbg/ HyperDBG] - 하드웨어 보조 가상화를 이용한 커널 디버거
* [[인텔 디버거]] (IDB)
* [[인사이트 디버거|인사이트]]
* [[Insure++|파라소프트 Insure++]]
* iSYSTEM — [[인 서킷 디버거]] ([[임베디드 시스템]]용)
* [[인터랙티브 디스어셈블러]] (IDA 프로)
* [[자바 플랫폼 디버거 아키텍처]]
* [[징크스 디버거|징크스]](Jinx) — heisenbugs용 시스템 디버거. 장치 드라이버로 투명하게 동작.
* [[JSwat]] — 오픈 소스 자바 디버거
* [[LLDB (디버거)|LLDB]]
* [[맥스버그]](MacsBug)
* [[Nemiver]] — [[그놈]]용 그래픽 C/C++ 디버거
* [[OLIVER (CICS 인터랙티브 테스트/디버그)]] - GUI 방식의 [[명령어 집합 시뮬레이터]] (ISS)
* [[OllyDbg]] (올리디버거)
* [[Omniscient Debugger]] — 자바용 디버거 (Forward and backward debugger for Java)
* [[pydbg]]
* [[IBM Rational Purify]]
* 리얼뷰 디버거 — [[ARM 리미티드|ARM]]이 설계하여 만든 상용 디버거
* [[sdb (디버거)|sdb]]
* [[SIMMON]] (시뮬레이션 모니터)
* [[SIMON (배치 인터랙티브 테스트/디버그)]] — GUI 방식의 [[명령어 집합 시뮬레이터]] (ISS), [[일괄 처리]]용
* [[소프트아이스]](SoftICE)
* 타임머신(TimeMachine) — [[그린 힐스 소프트웨어]]가 만든 디버거(Forward and backward debugger)
* [[토털뷰]](TotalView)
* [[:en:Lauterbach (company)|Lauterbach]] [[TRACE32]] — [[임베디드 시스템]]용 [[인 서킷 디버거]]
* [[터보 디버거]]
* [[Ups (디버거)|Ups]] — C, 포트란 소스 수준 디버거
* [[Valgrind]]
* [[VB 워치|VB 워치 디버거]] — 비주얼 베이직 6.0용 디버거
* [[마이크로소프트 비주얼 스튜디오 디버거]]
* [[WinDbg]]
* [[Xdebug]] — PHP 디버거 및 프로파일러

* [[frida]] - 모바일 후킹 및 디버거

== 같이 보기 ==
* [[디버그]]
* [[브레이크포인트]]
* [[커널 디버거]], [[메모리 디버거]]

== 외부 링크 ==
* {{dmoz|/Computers/Programming/Development_Tools/Debugging|Debugging tools}}
* {{dmoz|/Computers/Parallel_Computing/Programming/Tools/|Parallel computing development and debugging tools}}

[[분류:디버거| ]]
[[분류:유틸리티 소프트웨어 종류]]