컴퓨터/C
프로그래밍을 배우면 한 번쯤을 들어봤을 것입니다. 직역하자면 벌레를 제거한다. 버그를 제거한다로 프로그램에서 발생하는 오류나 비정상적인 상태를 찾고 수정하는 과정을 디버깅 디버그라고 합니다. 넓은 범위에서 프로그램의 오류를 찾는 다양한 방법들을 모두 디버깅한다 디버그 한다라고 말합니다.
본문에서는 프로그래머가 직접 디버깅을 하는 방법과 소프트웨어의 도움을 받아하는 두 가지 방법에 대하여 알아보도록 하겠습니다.
프로그래머가 만든 소스코드에 디버깅을 하기 위해 특별한 소스코드를 제작하여 확인을 하는 방법들을 일컫습니다.
예를 들어 아래와 같은 소스코드가 있다고 가정해보도록 하겠습니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
typedef struct _Student
{
char name[20];
int Kor;
int Eng;
int Math;
float Avg;
}Student;
int main()
{
Student student[30];
int count = 0;
while (1)
{
// 디버깅 구간 확인 1
printf("반복문 진입점 확인용 출력\n");
printf("===== 학생 성적 관리 프로그램 =====\n");
printf("1. 학생 정보 입력하기 \t 2. 학생 정보 출력하기 \t 3. 프로그램 종료하기 \n");
printf("원하는 메뉴를 입력하세요 : ");
int input;
scanf("%d", &input);
printf("\n\n");
// 디버깅 구간 확인 2
printf("메인 메뉴 입력 후 상태 확인 및 입력값 : %d\n",input);
if (input == 1)
{
// 디버깅 구간 확인 3
printf("학생 정보 입력하기 구간 진입\n");
if (count == 30)
{
printf("이미 30명의 학생의 정보를 모두 추가 했습니다.\n");
printf("더 이상 추가 할 수 없습니다.\n\n");
}
else
{
printf("===== 학생 정보 입력하기 [%d / 30] =====\n", count + 1);
printf("이름 : ");
scanf("%s", &student[count].name);
printf("국어 : ");
scanf("%d", &student[count].Kor);
printf("영어 : ");
scanf("%d", &student[count].Eng);
printf("수학 : ");
scanf("%d", &student[count].Math);
student[count].Avg = (float)(student[count].Kor + student[count].Eng + student[count].Math) / 3.0f;
count++;
}
}
else if (input == 2)
{
printf("===== 학생 정보 출력하기 =====\n");
for (int i = 0; i < count ; i++)
{
printf("학생 [%d/30]\n", i + 1);
printf("이름 : %s \t 국어 : %d \t 영어 : %d \t 수학 : %d \t [평균 점수 : %f] \n\n",
student[i].name,student[i].Kor,student[i].Eng,student[i].Math,student[i].Avg);
}
}
else if (input == 3)
{
printf("프로그램을 종료합니다.\n");
break;
}
else
{
printf("잘못된 메뉴를 선택 했습니다. 다시 입력해 주세요\n\n");
}
}
return 0;
}
위 소스코드처럼 프로그래머가 직접 프로그램이 진행되는 흐름에 어떠한 처리를 하면서 프로그램이 어디까지는 정상적으로 진행이 되고 있구나를 확인할 수 있습니다.
다양한 IDE환경에서는 디버깅을 하기위한 기능들을 제공합니다. 이 디버깅 기능을 통해 어떠한 시점에서 그 프로그램의 상태 등을 확인할 수 있습니다. 본문에서는 VisualStudio의 디버깅 툴을 활용하는 방법에 대하여 간단하게 알아보고 활용해 보도록 하겠습니다.
우리가 작성한 소스코드는 세미콜론 ; 으로 실행 단위가 구분되어 처리됩니다. Visualstudio에서 제공하는 디버깅 툴을 이용하여 중단점을 설정하면 중단점 이전까지 소스코드가 진행된 결과를 확인할 수 있습니다.
중단점의 설정 방법은 아래 사진처럼 원하는 번호 옆을 선택하여 클릭 또는 우클릭 중단점 생성/제거를 통해 할 수 있습니다.
디버깅 기능을 사용하기 위해서 보통 F5 버튼을 누르거나 상단의 Debug에서 Start Debugging(디버깅 시작)을 눌러 실행합니다.
디버깅을 실행하면 사용자에게 다양한 프로그램의 상태를 볼 수 있는 기능들을 제공해 줍니다. 본문에서는 기본적으로 상태를 보기 위한 몇 가지 기능에 대하여 설명드리도록 하겠습니다. 만약 본인의 디버깅 툴 실행 환경에서 없는 기능이 있다면 아래의 사진으로 들어가서 기능을 추가할 수 있습니다.
Autos는 현재 프로그램에서 읽어온 정보들을 자동으로 추천하여 보여주는 탭입니다.
Locals는 현재 디버깅이 실행되는 라인이 포함된 지역의 변수들의 값들을 보여주는 탭입니다.
이 두 탭을 이용하여 현재 디버깅 포인트에서 지역변수들 또는 보이는 값들의 변화와 상태를 확인할 수 있습니다.
Watch탭을 이용하여 사용자는 보고 싶은 다양한 값들을 확인할 수 있습니다. 원하는 변숫값 논리 수식 등 다양한 값을 사용자가 원하는 형태로 추가하여 확인할 수 있습니다.
Memory탭은 실제 컴퓨터의 메모리 자원 안에 어떠한 값이 들어가 있는지 확인할 수 있습니다. 메모리 상의 변화를 눈으로 보기에 좋은 기능입니다. 아래처럼 주소 값 또는 변수명을 이용하면 해당 값을 확인할 수 있습니다.
위에서 디버깅 툴을 이용하여 프로그램과 컴퓨터의 상태를 보는 탭들에 대하여 알았다면 이제 디버깅 툴을 이용해 프로그램을 실행하며 값의 변화를 봐야 될 것입니다. 그 기능들에 대해 간단하게 설명하도록 하겠습니다.
Continue를 한다면 디버깅 툴은 현재 실행된 시점부터 다음 중단점을 만날 때까지 실행됩니다.
Step Over는 한 줄의 명령을 실행하는 방법입니다. 현재 시점부터 한줄만 실행하고 싶을때 사용합니다.
Step Into는 Step Over처럼 한줄의 명령을 실행합니다. 하지만 해당 줄을 실행하기 위해서 다른 외부의 함수 또는 기능들의 호출이 있다면 그 호출되는 영역의 공간으로 이동합니다. (함수 등을 만들어 호출하는 과정에서 문제가 생겼는지 확인을 하려면 이 기능을 사용해야 됩니다.)
디버깅을 종료하고, 소스코드 편집 화면으로 돌아가고 싶으면 Shift+F5를 이용합니다.
C 언어 - 용어 Call by value & Call by reference (0) | 2021.07.14 |
---|---|
C 언어 - 실습 - 학생관리 프로그램Ver2(함수화) (0) | 2021.07.13 |
C 언어 - 실습 - 학생관리 프로그램Ver1(기초 지식 이용) (0) | 2021.07.11 |
C 언어 - void 키워드 (0) | 2021.07.10 |
C 언어 - 문자열을 숫자로 atoi / atol / atoll / atof (0) | 2021.07.08 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet