자료실/공통 자료실

비주얼스튜디오(Visual Studio) - 브레이크 포인트(Break Point)

자료수집중 2020. 7. 20.
반응형

*Visual Studio 2017로 작성했습니다.

 

코드를 작성해서 실행하다 보면 에러가 발생합니다.

에러가 발생하면

빌드가 실패했다는 메시지가 나옵니다. 보통 컴파일 에러는 아래 어떤 에러가 발생했는지 오류 목록에서 알려줍니다.

에러 내역을 클릭하면 발생한 라인까지도 표시해 줍니다.

아니면 빨간 줄로 표시되는 경우도 있습니다.

 

하지만 다음과 같이 실행은 되지만 런타임 에러가 발생하는 경우

에러가 난 위치가 설명으로 나와서 쉽게 찾는 경우도 있지만 방대한 양의 코드를 작성했거나 설명이 모자라면 난감한 상황이 발생합니다.

이때 브레이크 포인트(또는 중단점)를 이용해서 에러가 발생한 범위를 압축해서 원인을 찾을 수 있습니다.

이제 브레이크 포인트 삽입하는 방법을 알아보겠습니다.

브레이크 포인트를 삽입하는 가장 쉬운 방법은 작성하는 코드 옆의 빈칸을 클릭하는 방법입니다.

제거하는 방법도 다시 클릭하면 제거됩니다.

만약 중단점 사용 안 함을 클릭하면

브레이크 포인트를 사용하지 않고 패스합니다.

 

다른 방법은 브레이크 포인트를 삽입하고 싶은 라인에서  마우스 오른쪽을 클릭하면 '중단점'이 나옵니다.

중단점을 클릭하면 '중단점 삽입'이 나옵니다.

중단점이 삽입된 라인에서 똑같이 마우스 오른쪽 클릭 -> 중단점을 들어가면

삭제 및 해제가 나옵니다.


'F9'를 이용해서 커서를 올려놓은 라인의 브레이크 포인트를 삽입 제거도 가능합니다.

메뉴의 '디버그' 에서에서 '모든 중단점 삭제'로 한 번에 제거도 가능합니다.

 

 

이제 강제로 에러를 발생시켜서 브레이크 포인트를 사용해보겠습니다.

#include <Stdio.h> 

#define ARRAY_SIZE 10

int arraySum(int a[]);
float arrayAvg(int a[]);

int main(void) {
	int array_1[ARRAY_SIZE];
	int sum = 0;
	float avg = 0;

	for (int i = 0; i < ARRAY_SIZE;i++) {
		array_1[i] = i + 1;
	}

	sum = arraySum(array_1);
	avg = arrayAvg(array_1);

	printf("배열의 총 합은 = %d \n", sum);
	printf("배열의 평균은 = %.1f \n", avg);

	return 0;
}


int arraySum(int a[]) {
	int sum  ;

	for (int i = 0; i < ARRAY_SIZE; i++) {
		sum+=a[i];
	}

	return sum;
}
float arrayAvg(int a[]) {
	int sum = 0;

	float avg = 0;
	for (int i = 0; i < ARRAY_SIZE; i++) {
		sum += a[i];
	}

	avg = (float)sum / ARRAY_SIZE;
	return avg;
}

위의 코드는 arraySum()에서 int sum을 초기화해주지 않고 사용하여 쓰레기 값이 들어가서 이대로 실행시키면 런타임 에러가 발생합니다. 

이제 브레이크 포인트를 하나씩 삽입해보겠습니다.

이제 디버그를 해야 합니다. 보통 CTRL + F5로 하지만 이건 '디버그 하지 않고 시작'입니다.

브레이크 포인트를 사용하려면 그냥 F5를 누르면 시작됩니다.

아니면 메뉴의 '디버그'에서 '디버깅 시작'을 누르면 됩니다.

디버그가 시작되면 브레이크 포인트에 노란 화살표가 들어옵니다. 그러면 노란 화살표가 있는 브레이크 포인트에서 프로그램이 중단된 상태입니다.

다음 브레이크 포인트까지 실행하려면 다시 F5를 누르면 됩니다.

계속 계속 진행하다 보면 예외가 발생했다면서 프로그램이 중단됩니다.

이제 많이 에러가 발생한 지점이 많이 압축됐습니다.

조금 더 자세하게 찾아보는 방법은 F11(또는 F10)을 이용하는 방법입니다.

F11을 누르면 한 줄 한 줄 코드를 실행해줍니다.

반복문 같은 경우는 실제 반복까지 그대로 따라서 한줄한줄 실행됩니다.

디버그 실행 중에 변수들이나 함수에 인수가 정확히 전달되는지 등을 확인할 수도 있습니다.

메뉴에서 '디버그' -> 창(windows)으로 들어가면 자동(Autos)과 지역(locals)이 있습니다. 클릭해주면

이제 비주얼 스튜디오 하단 부분에 변경되는 항목을 볼 수 있습니다.

이제 아까 프로그램이 중단된 라인 근처에서 한 줄 한 줄 확인해보면 변수가 초기화 되지않아 쓰레기 값이 입력되있는 모습을 볼 수 있습니다.

 

이제 디버깅을 중지하고 (SHIFT + F5 : 디버깅 중지) 

브레이크 포인트를 제거하고 다시 CTRL + F5로 디버그 패스 후 실행하면

정상적으로 프로그램이 작동하게 됩니다.

 

 

* F10과 F11 비교F10은 프로시저 단위 실행F11은 코드를 한줄 한줄 실행합니다.(함수 포함)

 

F10은 프로시저 단위를 함수 단위와 비슷하게 생각하면 됩니다.

F10은 함수를 만나면 그냥 실행하고 넘어갑니다.

F11은 함수 내부까지도 한 줄 한 줄 실행합니다.

F11도 함수에서 탈출하려면 SHIFT + F11을 누르면 함수를 바로 탈출합니다.

댓글