본문 바로가기
cs/CS50

3: 배열-2(버그와 디버그)

by 이쟝 2021. 11. 25.

2. 디버깅

1) 버그와 디버깅

  • 버그(bug): 코드에 들어있는 오류
  • 버그로 인해 프로그램의 실행에 실패하거나 프로그래머가 원하는 대로 동작하지 않게 됨
  • 디버깅(debugging)은 코드에 있는 버그를 식별하고 고치는 과정
  • 프로그래머는 디버거라고 불리는 프로그램을 사용해 디버깅을 하게 됨

2) 디버깅의 기본

  • 디버거는 프로그램을 특정 행에서 멈출 수 있게 해 주기 때문에 버그를 찾는데 도움이 됨
  • 프로그래머는 멈춰진 지점에서 무슨 일이 일어나는지 볼 수 있음
  • 프로그램이 멈추는 특정 지점을 중지점(break point)이라고 함
  • 프로그래머가 프로그램을 한 번에 한행씩 실행할 수 있게 해 줘서 프로그래머는 프로그램이 내리는 모든 결정들을 단계별로 따라갈 수 있게 됨

3) help 50

  • help50은 cs50파일이 제공하는 도구들 중 하나(cs50을 위해서 만든 파일)
  • 자체 help50 소프트웨어를 통해 이해 가능한 메시지를 찾을 수 있음
int main(void)
{
    printf("Hello, World\n");
}

 

  • (make 프로그램을 이용해 컴파일하면 “implicitly declaring library function 'printf'” 이라는 에러 메시지가 나타남
  • make 앞에 help50을 붙여서 실행하면 컴파일 시 생기는 오류를 해석해줌

"Help50 make 파일이름"으로 터미널에 입력!

 

오류 메시지 중 이해할 수 있는 내용이 있다면 이와 같이 노란색으로 강조해줌.

→ 원인은 printf 함수를 사용하기 위해서 stdio.h 라이브러리를 포함해야 하는 것

 

4) printf

만약 문법적오류가 아닌 논리적 오류라면 디버깅의 다른 방법으로 직접 의심이 가는 변수를 출력해서 확인해 볼 수 있음

예) #을 10개 출력하기 위해 코드 작성하기

 

#include <stdio.h>
int main(void)
{
    for(int i=0;i<=10;i++)
    {
        printf("*\n");
    }
}

 

→ 코드를 컴파일하고 실행하면 에러는 발생하지 않지만, #이 11개나 출력됨

→ 변수 i를 출력

 

#include <stdio.h>
int main(void)
{
    for(int i=0;i<=10;i++)
    {
        printf("i is now %i:", i);
        printf("*\n");
    }
}

 

결과

→ i가 0에서 시작해서 for 루프의 1<=10이라는 조건은 11번 나옴! 따라서 i <10으로 수정해주면 #이 10번 출력됨!

 

 

https://www.boostcourse.org/cs112/joinLectures/41307

 

모두를 위한 컴퓨터 과학 (CS50 2019)

부스트코스 무료 강의

www.boostcourse.org

 

'cs > CS50' 카테고리의 다른 글

3: 배열-4(문자열과 배열)  (0) 2021.11.27
3: 배열-3(메모리와 배열:전역변수)  (0) 2021.11.25
3: 배열-1(컴파일링)  (0) 2021.11.25
2: C언어-6(오버플로우)  (0) 2021.11.24
2: C언어-5(중첩 루프)  (0) 2021.11.24