디버깅(Debugging)
디버깅은 de+bug의 합성어로는 "벌레를 없앤다" 에서 유래 되었습니다. 진공관을 사용하는 시절에 벌레가 들어가면 오류가 났었는데, 이때 벌레를 제거하면 정상적으로 동작하였다고 합니다. 버그가 프로그램 오류라는 의미를 가지게 되었고, 디버깅은 프로그램의 오류를 제거하는 행위라는 의미를 가지게 되었습니다. 프로그래밍에서의 오류는 문법적 오류와 논리적 오류 두 가지로 나뉩니다.
- 문법적 오류
C언어 작성 과정에서 발생하며, 프로그램 문법상의 오류를 뜻합니다. 문법적 오류는 컴파일 되지 않습니다.
------------------------------------------------------------------------------------------
#include <stdio.h>
#pragma warning(disable:4996)
int main()
{
int 1;
}
------------------------------------------------------------------------------------------
위 코드와 같이 문법적 오류를 범하면 아래 사진과 같이 컴파일이 되지않고, 오류 메시지를 출력해줍니다. 오류 메시지는 문법적인 오류의 종류에 따라 다르게 출력됩니다.
- 논리적 오류
프로그램 논리상의 오류로 컴파일은 되지만, 정상적으로 동작하지 않습니다. 프로그램을 분석해서 찾아야 합니다. 다음과 같은 코드를 작성했을때 정상적으로 동작할까요?
------------------------------------------------------------------------------------------
#pragma warning(disable:4996)
int main()
{
int i;
int input;
input = 1;
for (i = 0; i < 5; i++)
{
printf("디버깅 테스트 \n");
printf("종료를 원하시면 0을 입력하세요 : ");
scanf("%d", &input);
if (input = 0)
{
break;
}
}
}
------------------------------------------------------------------------------------------
- 디버깅 도구
이때, 소스코드에는 아래 그림과 같이 왼쪽에 노란색 화살표가 생기는데, 진행 할 지점을 뜻합니다. 아래 그림에서 F10을 눌러 한줄을 더 실행하면 변수 선언부분은 건너뛰고 input=1; 으로 넘어갑니다. 변수 선언 처럼 실제 동작하는 과정이 아닌 부분은 건너 뛰게됩니다.
계속 한줄 씩 실행해서 scanf로 숫자를 입력하는 부분까지 실행하게되면, 처음에 떴던 콘솔창에 다음과같이 출력됩니다.
콘솔 창에 0을 입력하게되면 input 변수에 0이 저장되는데, 아래 자동 탭을 보면 변수값이 정상적으로 들어간걸 확인할 수 있습니다.
마지막으로, 반복해서 디버깅할때, 계속 처음부터 한줄씩 실행하려면 번거롭습니다. 이때 사용하는게 중단점입니다. 중단점을 설정하면, 디버깅을 시작할 때 중단점부터 디버깅을 수행하도록 할 수 있습니다. 아래 그림에서는 if(input=0)라인에 중단점을 설정 하였습니다. F9키로 설정/해제 가능합니다.
단축키 |
의미 |
Ctrl + F5 |
디버깅 하지 않고, 컴파일 진행 |
F5 |
(디버깅 시작) 중단점 까지 프로그램을 진행 |
F9 |
중단점 삽입 / 제거 |
F10 |
(디버깅 시작) 프로그램을 한 단계씩 진행 |
Shift + F5 | 디버깅 종료 |
스타일 C프로그래밍 저.김종훈,김종진 출.WellBook