참고※참고 자료는 드림핵을 이용하였습니다.
※드림핵의 로드맵대로 공부할 예정입니다.
※스스로를 위해 정리한 참고 자료입니다.
VS code로 기본적인 C 코드를 작성해 보겠습니다.
#include <stdio.h>
int main(){
printf("Hello Beginners!\n");
return 0;
}
ㅇ VS code를 열고 리눅스에 원격 접속한 뒤, 아래와 같이 Desktop 디렉토리에 test.c 파일을 생성합니다.
ㅇ 아래와 같이 test.c 파일에 위에서 소개한 C 코드를 작성하고 저장합니다.
소스 코드가 포함된 c 파일은 컴파일 과정을 거쳐야 실행 가능한 파일로 변환됩니다.
- 리눅스에서 C/C++ 언어로 작성된 소스 코드를 컴파일할 때는 주로 gcc 컴파일러를 사용합니다.
- 리눅스 터미널에 gcc --version을 입력하여 다음과 같이 버전이 출력되는지 확인합니다.(버전 숫자는 달라도 괜찮습니다!)
user@LAPTOP-FM1BL380:~$ gcc --version gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0 Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- 버전이 뜨지 않으면 아래 명령어를 통해 gcc를 설치합니다.
sudo apt install gcc
- 설치가 완료되면 test.c 파일이 있는 디렉토리로 이동하고 컴파일합니다.
- 아래는 test.c 파일을 실행 가능한 test 파일로 컴파일하는 명령어입니다.
- 컴파일 후에 ./test 명령으로 test 파일을 실행하면 “Hello Beginners!”가 출력됩니다.
gcc -o test test.c
VS code의 C/C++ 확장 프로그램을 사용하면, gcc 명령어를 직접 사용해서 컴파일 하지 않아도 메뉴를 통해 컴파일하여 실행할 수 있습니다.
소스 코드의 문법이 잘못되었거나 비정상적인 코드를 작성한 경우 컴파일 혹은 실행 과정에서 에러가 발생합니다.
아래의 그림은 에러가 발생하는 예시 코드입니다.
- VS code에서 코드를 실행하면 터미널 창에 에러 메시지가 출력됩니다.
- 이처럼 코드에 에러가 발생한 경우, 출력된 에러 메시지를 활용해서 어느 부분이 잘못되었는지 알아내고 수정하여 에러를 해결할 수 있어야 합니다.
터미널 창을 보면 에러가 발생한 이유는 error: 'sum' undeclared (first use in this function)이고, 에러가 발생한 코드는 11번 라인의 sum=a+b;입니다. 에러 메시지를 통해 sum 변수가 선언되지 않아서 에러가 발생했다는 것을 알 수 있고, 이에 따라 11번 라인 이전에 int sum=0;을 추가하면 에러가 발생하지 않습니다.
해당 에러는 수정하기 쉬운 예시이지만, 에러 메시지를 봐도 어떤 에러인지, 어떻게 해결하는지 알기 어려운 경우가 많습니다. 이런 경우 구글링을 통해 사람들이 비슷한 에러를 어떻게 처리했는지 참고하는 것도 좋은 방법입니다.
아래 그림의 에러 메시지 undeclared (first use in this function)를 구글에 검색해 보면 동일한 에러를 겪은 사람의 게시글이 가장 먼저 뜹니다. 해당 게시글에 달린 여러 사람들의 답변을 보고, 에러를 해결하려면 변수를 선언해야 한다는 사실을 알아낼 수 있습니다.
에러 해결에 도움이 되는 또 다른 방법으로 디버깅이 있습니다.
- 디버깅(Debugging)은 소스 코드의 오류(버그)를 찾고 수정하는 과정을 말합니다. 코드를 검사하여 잘못된 부분을 찾거나, 특정 코드를 수행한 결과를 확인하기 위해 사용합니다.
- VS code에서 제공하는 디버깅 기능을 살펴 보겠습니다.
- 상단 메뉴의 Run - Start Bebugging 혹은 단축키 F5로 디버깅을 시작할 수 있습니다.
Breakpoint
주로 확인하고 싶은 코드에 Breakpoint(중단점)를 설정한 뒤 디버깅을 시작합니다. 중단점을 설정하면 해당 코드를 실행하기 직전에 프로그램을 중단하여 그 시점의 변수 값이나 콜 스택 정보 등을 확인할 수 있습니다. 중단점은 코드 줄 번호 왼쪽을 클릭하거나 코드에 커서를 두고 단축키 f9를 클릭하여 설정합니다.Debug View
디버깅을 시작하면 좌측 Debug View에서 VARIABLES(변수), WATCH(변수 또는 표현식의 결과), CALL STACK(호출한 함수), BREAKPOINTS(사용자가 설정한 중단점 목록) 등의 정보를 확인할 수 있습니다.Debug Toolbar
디버깅 툴바의 각 버튼은 순서대로 다음과 같은 기능을 합니다.
- ⏯️ Continue/Pause : 다음 중단점을 만날 때까지 프로그램 실행 혹은 프로그램 중단 (f5)
- ➡️ Step Over : 코드 한 줄 실행 - 함수를 만나면 함수 실행 (f10)
- ⬇️ Step Into : 코드 한 줄 실행 - 함수를 만나면 함수 내부로 이동하여 한 줄 실행 (f11)
- ⬆️ Step Out : 함수의 나머지 부분을 모두 실행 (Shift+f11)
- 🔄️ Restart : 디버깅 재시작 (Ctrl+Shift+f5)
- ⏹️ Stop : 디버깅 종료 (Shift+f5)
Debug Console
- 디버깅 결과를 출력하는 콘솔 창입니다.
- Vim(Vi IMproved)은 UNIX의 Vi 편집기(Visual editor)의 기능을 개선한 버전의 텍스트 편집기로, Linux, macOS, BSD 등 UNIX 기반의 모든 환경에서 사용할 수 있습니다.
- 마우스 없이 키보드 입력만으로 모든 작업이 가능하기 때문에 Vim 사용에 익숙해지면 소스 코드를 매우 빠르고 효율적으로 편집할 수 있습니다.
- 리눅스 환경에서는 Vim 편집기 사용법을 알아 두면 편리합니다. 물론 꼭 알아야 하는 것은 아니지만, 다른 편집기를 사용할 수 없는 경우를 대비하여 익혀두는 것도 좋습니다.
- 우분투 리눅스에는 Vim이 기본적으로 설치되어 있는 경우도 있으나 만약 없다면 터미널에서 sudo apt install vim 명령을 실행하여 설치합니다.
vi 명령을 입력하면 아래와 같이 Vim이 실행됩니다.
vi 파일명은 기존 파일을 수정하거나 새 파일을 생성합니다. 아래는 vi a.txt 명령으로 a.txt 파일을 연 모습입니다.
모드
커서이동 | 내용 |
---|---|
gg | 첫 행으로 이동 |
k | 위로 이동 |
0 | 행의 처음으로 이동 |
h | 왼쪽으로 이동 |
l | 오른쪽으로 이동 |
$ | 행의 끝으로 이동 |
G | 마지막 행으로 이동 |
j | 아래로 이동 |
삭제,복사,붙여넣기 | 내용 |
---|---|
x | 현재 커서가 위치한 글자 삭제(del) |
X | 현재 커서 앞 글자 삭제(backspace) |
dd | 현재 커서가 위치한 행 삭제 |
yy | 현재 커서가 위치한 행 복사 |
p | 복사한 내용을 현재 행 이후에 붙여넣기 |
P | 복사한 내용을 현재 행 이전에 붙여넣기 |
문자열 찾기 | 내용 |
---|---|
/문자열,enter | 현재 커서 이후로 문자열 찾기 |
n | 찾은 문자열 목록에서 다음 문자로 이동 |
되돌리기 | 내용 |
---|---|
u | 이전 수정 사항 되돌리기 |
Insert Mode (입력 모드)
입력 모드 명령 키 | 내용 |
---|---|
o | 현재 커서 다음 줄에 입력 |
O | 현재 커서 이전 줄에 입력 |
i | 현재 커서 위치에 입력 |
I | 현재 커서가 위치한 행의 처음에 입력 |
s | 현재 커서 한 글자 지우고 입력 |
S | 현재 커서 한 줄 지우고 입력 |
a | 현재 커서 다음 칸에 입력 |
A | 현재 커서가 위치한 행의 마지막에 입력 |
Command Mode (명령 모드)
명령 모드 명령어 | 내용 |
---|---|
:w | 저장 |
:q | 종료 |
:i | 취소 |
:wq | 저장하고 종료 |
:q! | 저장하지 않고 종료 |
:%s/문자열1/문자열2/g | 전체에서 문자열1을 모두 찾아 문자열2로 치환 |