[CS50 2019] 3강. Array(1/3) - 컴파일, 디버깅, 코드의 디자인

OFFDUTYBYBLO·2021년 11월 26일
0
post-thumbnail

1. 컴파일링

  • make나 clang을 사용해서 프로그램을 실행할 때 4개의 단계를 거친다.

전처리(Precompile)

  • 전처리의 과정은 전처리기에 의해 수행
  • '#'으로 시작되는 C 소스 코드는 전처리기에게 실질적인 컴파일이 이루어지기 전에 무언가를 실행시키라고 알려준다. 예) #include는 전처리기에게 다른 파일의 내용을 포함시키라는 명령,

컴파일(Compile)

  • 컴파일러가 C코드를 어슴블리어라는 저수준 프로그래밍 언어로 컴파일한다.
  • 어셈블리는 C보다 연산의 종류가 훨씬 적지만, 여러 연산들이 함께 사용되면 C에서 할 수 있는 모든 것들을 수행
  • C코드를 어셈블리 코드로 변환 => 프로그램 완성 => 컴퓨터가 실행
  • 넓은 의미로 소스코드를 오브젝트 코드로 변환하는 전체 과정
  • 좁은 의미로 구체적으로 전처리한 소스 코드를 어셈블리 코드로 변환시키는 단계

어셈블(Assemble)

  • 어셈블러라는 프로그램이 수행
  • 어셈블리 코드를 오브젝트 코드로 변환하는 단계
  • CPU가 이해할 수 있도록 0과1로 변환하는 작업
  • 프로그램이 여러 개의 파일로 이루어져 있어 하나의 오브젝트 파일로 합쳐져야 할 때 거치는 과정
  • 만약 프로그램이 하나라면 필요 없음
  • 링커는 여러 개의 다른 오브젝트 코드 파일을 실행 가능한 하나의 오브젝트 코드파일로 합쳐준다.

2. 디버깅

버그

  • 버그는 코드에 존재하는 오류를 의미한다.
  • 개발자가 원하는 대로 기능을 구현했는데 이와 다르게 동작하거나, 실행에 실패하는 것을 의미

디버깅

  • 디버깅은 버그를 찾아 고치는 과정이다.
  • 디버거라는 프로그램을 사용해서 디버깅 수행
  • 디버거는 프로그램을 특정 행이나 시점에서 멈출 수 있게 해준다.
  • 개발자는 breakpoint를 지정하고 이 지점에 컴퓨터의 해석이 도달했을 때, 프로그램이 중단되면서 버그를 고칠 수 있다.
  • 개발자가 프로그램을 한번에 한 행씩 실행할 수 있게 도와준다.

GDB

  • 자주 사용되는 디버거 중 하나
  • 사용하기 위해서는 프로그램을 컴파일하고 "./gdb프로그램_이름"을 입력
  • 제일 먼저 중지점(braekpoint)를 설정한다.
  • 중지점을 설정하 위해서는 프로그램을 멈추고 싶은 행 번호 다음에 'b'를 입력하고 엔터 키를 누른다.
  • 중지점의 행 번호 다음에 "clear"를 치면 중지점을 제거할 수 있다.
  • 중지점을 설정했다면, 'r'(run의미)로 프로그램을 실행한다.
  • 현재 지점에서 프로그램의 변수값을 보고 싶다면 변수 이름 다음에'p'를 입력한다.
  • 코드의 다음 행으로 넘어가고싶다면 'n'을 입력한다. s를 쳐도 코드의 다음 행으로 가지만, 함수 내부로 들어가서 함수 내부의 각 행을 훑을 것이다.
  • 프로그램을 계속 실행하고 싶다면 'c'를 입력한다. 중지점이 없다면 프로그램은 종료

3. 코드의 디자인

check50

  • 내가 작성한 코드가 전체 프로그램의 정확성을 해치지 않는지 쉽게 확인이 가능하다.
  • 우리는 혼자가 아닌 협업을 하기에 이런 테스트가 필요하다.

style50

  • 스타일 컨벤션에 대한 이야기 생략
profile
블로그 운영 x

0개의 댓글