[CS50 2019] 3강. Array(1/3) - 컴파일, 디버깅, 코드의 디자인
1. 컴파일링
- make나 clang을 사용해서 프로그램을 실행할 때 4개의 단계를 거친다.
전처리(Precompile)
- 전처리의 과정은 전처리기에 의해 수행
- '#'으로 시작되는 C 소스 코드는 전처리기에게 실질적인 컴파일이 이루어지기 전에 무언가를 실행시키라고 알려준다. 예) #include는 전처리기에게 다른 파일의 내용을 포함시키라는 명령,
컴파일(Compile)
- 컴파일러가 C코드를 어슴블리어라는 저수준 프로그래밍 언어로 컴파일한다.
- 어셈블리는 C보다 연산의 종류가 훨씬 적지만, 여러 연산들이 함께 사용되면 C에서 할 수 있는 모든 것들을 수행
- C코드를 어셈블리 코드로 변환 => 프로그램 완성 => 컴퓨터가 실행
- 넓은 의미로 소스코드를 오브젝트 코드로 변환하는 전체 과정
- 좁은 의미로 구체적으로 전처리한 소스 코드를 어셈블리 코드로 변환시키는 단계
어셈블(Assemble)
- 어셈블러라는 프로그램이 수행
- 어셈블리 코드를 오브젝트 코드로 변환하는 단계
- CPU가 이해할 수 있도록 0과1로 변환하는 작업
링크(Link)
- 프로그램이 여러 개의 파일로 이루어져 있어 하나의 오브젝트 파일로 합쳐져야 할 때 거치는 과정
- 만약 프로그램이 하나라면 필요 없음
- 링커는 여러 개의 다른 오브젝트 코드 파일을 실행 가능한 하나의 오브젝트 코드파일로 합쳐준다.
2. 디버깅
버그
- 버그는 코드에 존재하는 오류를 의미한다.
- 개발자가 원하는 대로 기능을 구현했는데 이와 다르게 동작하거나, 실행에 실패하는 것을 의미
디버깅
- 디버깅은 버그를 찾아 고치는 과정이다.
- 디버거라는 프로그램을 사용해서 디버깅 수행
- 디버거는 프로그램을 특정 행이나 시점에서 멈출 수 있게 해준다.
- 개발자는 breakpoint를 지정하고 이 지점에 컴퓨터의 해석이 도달했을 때, 프로그램이 중단되면서 버그를 고칠 수 있다.
- 개발자가 프로그램을 한번에 한 행씩 실행할 수 있게 도와준다.
GDB
- 자주 사용되는 디버거 중 하나
- 사용하기 위해서는 프로그램을 컴파일하고 "./gdb프로그램_이름"을 입력
- 제일 먼저 중지점(braekpoint)를 설정한다.
- 중지점을 설정하 위해서는 프로그램을 멈추고 싶은 행 번호 다음에 'b'를 입력하고 엔터 키를 누른다.
- 중지점의 행 번호 다음에 "clear"를 치면 중지점을 제거할 수 있다.
- 중지점을 설정했다면, 'r'(run의미)로 프로그램을 실행한다.
- 현재 지점에서 프로그램의 변수값을 보고 싶다면 변수 이름 다음에'p'를 입력한다.
- 코드의 다음 행으로 넘어가고싶다면 'n'을 입력한다. s를 쳐도 코드의 다음 행으로 가지만, 함수 내부로 들어가서 함수 내부의 각 행을 훑을 것이다.
- 프로그램을 계속 실행하고 싶다면 'c'를 입력한다. 중지점이 없다면 프로그램은 종료
3. 코드의 디자인
check50
- 내가 작성한 코드가 전체 프로그램의 정확성을 해치지 않는지 쉽게 확인이 가능하다.
- 우리는 혼자가 아닌 협업을 하기에 이런 테스트가 필요하다.
style50