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
'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 |