디버깅
IT 위키
더 많은 작업
- Debugging
- 테스트 등으로 드러난 오류의 원인을 찾아 위치를 확인하고 수정하는 활동
- 테스트는 결함이 있다는 사실을 보여 줄 뿐 원인을 알려 주지 않는다. 디버깅은 테스트 결과를 받아 원인을 좁혀 가는 후속 활동이다.
- 정보처리기사 2026년 필기 출제기준에서는 '데이터 조작 프로시저 작성'의 세세항목 '프로그램 디버깅'으로 다룬다.
- 오류 재현: 실패가 나타나는 입력과 환경을 확인하고 같은 현상을 다시 만든다.
- 원인 추정·분리: 실패 지점 주변의 코드와 데이터를 좁혀 가며 원인이 되는 부분을 찾는다.
- 수정: 원인 코드를 고친다.
- 확인: 같은 테스트로 수정 결과를 확인하고, 회귀 테스트로 다른 부분에 영향이 없는지 본다.
| 기법 | 설명 |
|---|---|
| 브레이크포인트(Breakpoint) | 지정한 줄에서 실행을 멈추고 그 시점의 상태를 살펴본다. 조건을 만족할 때만 멈추는 조건부 브레이크포인트도 있다. |
| 단계 실행(Step) | 한 줄씩 실행한다. 함수 안으로 들어가는 Step Into, 함수를 한 번에 실행하는 Step Over, 현재 함수를 끝까지 실행하고 빠져나오는 Step Out이 있다. |
| 변수 감시(Watch) | 변수와 식의 값 변화를 지켜본다. |
| 호출 스택(Call Stack) | 현재 지점까지 어떤 함수들을 거쳐 왔는지 확인한다. |
| 로그 출력 | 실행 경로와 변수 값을 로그로 남겨 분석한다. 운영 환경처럼 디버거를 붙이기 어려운 곳에서 쓴다. 로그 레벨(DEBUG, INFO, WARN, ERROR)로 출력량을 조절한다. |
- 무차별 대입(Brute Force): 메모리 덤프, 출력문 등을 대량으로 모아 살펴본다. 효율은 낮지만 다른 방법이 통하지 않을 때 쓴다.
- 역추적(Backtracking): 실패가 나타난 지점에서 소스 코드를 거꾸로 따라가며 원인을 찾는다. 코드 규모가 작을 때 효과적이다.
- 원인 제거(Cause Elimination): 가설을 세우고 데이터를 분할(이분법)하며 가능한 원인을 하나씩 제거한다. 귀납적·연역적 추론을 쓴다.
- 한 번에 한 가지만 바꾸고 그때마다 결과를 확인한다.
- 수정 후에는 원래 실패를 재현했던 테스트를 테스트 케이스로 남겨 재발을 막는다.
- 운영 환경에서는 디버그용 출력과 디버그 모드를 끈다. 오류 메시지에 내부 정보가 노출되지 않도록 한다(Secure SDLC).
- 테스트와 디버깅의 차이: 테스트는 결함 발견, 디버깅은 원인 추적·수정
- 필기: 디버깅 접근법(무차별 대입, 역추적, 원인 제거) 구분
- 구현 도구(IDE)가 지원하는 디버깅 기능: 브레이크포인트, 단계 실행, 변수 감시