1. 개요
소프트웨어 개발자가 임의의 소프트웨어에서 버그를 쉽게 찾도록 디버깅을 도와주는 개발자 도구.2. 구조
2.1. 기능
- step-by-step execution: 디버거의 핵심 기능 중 하나. 보통 명령 또는 tree단위로 프로그램을 수행시키고, 개발자가 설정한 브레이크 포인트(break point, 중단점) 앞에서 실행을 멈춘다. step-in은 하위 프레임 호출 안으로 들어가기(=스택 위로 프레임을 쌓기)를 의미하고, step-out은 주로 현재 실행중인 프레임을 반환하기(=스택에서 프레임 pop하기)를 의미한다.
3. 종류
3.1. 백엔드와 프런트엔드
디버거라는 것이 언어마다 구현 방법이 천차만별이지만, 안 그래도 복잡한 디버깅 효율을 최대한으로 끌어올리려면 GUI로 현재 중단점, 컨텍스트 트리, 호출 스택, 메모리 뷰 등 다양한 정보를 IDE에 시각적으로 통합(integration)해 보여 줄 필요가 있다. 이렇게 되면 [math(N)]개의 IDE마다 [math(M)]개의 언어별로 일일히 디버깅 지원을 추가해야 하는데, 총 [math(N\times M)]개의 디버깅 지원을 구현한다는 것은 개발자의 관점에서 결코 좋은 설계가 아니다.따라서 보통의 경우 컴파일러나 언어 서버의 백엔드와 프런트엔드를 분리하듯이, 개별 언어별로 추상적인 디버거 백엔드를 한 번만 만들고 개별 IDE 제조사들은 Debug Adapter Protocol 등으로 이 둘을 통합해 재사용성을 높이는 방식의 설계를 사용한다. 실제로 대부분의 IDE가 자체 디버거를 내장한 것 같아도 백엔드로 gdb 등이나 다른 외부 디버거를 라이브러리 형태로 링크하고 있는 경우가 많다.