'C언어/C언어 개발환경 구축' 카테고리의 글 목록 :: YJcode

오늘은 저번시간에 진행하였던 VScode기반 C,C++ 컴파일환경 구현에 이어 디버깅 환경을 구현하도록 하겠습니다.


만약 VScode에서 C,C++ 컴파일 환경을 구현하지 않았다면 다음 링크를 통해 먼저 컴파일 환경을 구현 후 오시기 바랍니다.


2018/12/26 - [C언어/C언어 개발환경 구축] - 우분투 리눅스에서 VScode설치, C,C++코딩을 위한 환경설정하기



컴파일 환경까지 구현하셨다면 이제 디버깅을 구현하여야 하는데요, 디버깅이 무엇인지 왜 필요한지 모르신다면 "나중을 위해 환경을 설정해둔다."

이정도로만 알고 따라하셔도 무방합니다.


1. 컴파일 환경 구현때 설정한 task.json 파일을 일부 수정한다.

-- 컴파일환경을 제 블로그를 참고하여 구현하셨다면 파일탐색창에서 .VScode폴더안에 tasks.json 파일이 생성되어 있고 위 스크린샷과 같이 설정이 되어 있을 겁니다.


하지만 자세히 살펴보면 마냥 같지는 않고 조금 다른점을 볼 수 있는데요.

//C++ 컴파일
{
"label": "save and compile for C++",
"command": "g++",
"args": [
"-g3",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"group": "build",

이부분과

//C 컴파일
{
"label": "save and compile for C",
"command": "gcc",
"args": [
"-g3",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"group": "build",

이부분이 조금 다를 겁니다.

디버깅을 위해서는 컴파일을 실행할 당시에 디버깅 정보를 포함하여 주어야 하는데요, 이 컴파일정보를 포함하는 옵션을 g++과 gcc에 추가로 주기 위하여


"-g3"


이걸 "args": [ 

"이부분에 삽입합니다.",

"${file}",

"-o",

...

이런 형식으로 추가하여 주어야 합니다.

만약 찾아서 직접 수정하기 힘드시다면 그냥 아래 코드를 통째로 복사하셔서 tasks.json파일에 덮어쓰셔도 상관없습니다.

{
"version": "2.0.0",
"runner": "terminal",
"type": "shell",
"echoCommand": true,
"presentation" : { "reveal": "always" },
"tasks": [
//C++ 컴파일
{
"label": "save and compile for C++",
"command": "g++",
"args": [
"-g3",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"group": "build",



"problemMatcher": {
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
//C 컴파일
{
"label": "save and compile for C",
"command": "gcc",
"args": [
"-g3",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"group": "build",



"problemMatcher": {
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},

{

"label": "execute",

"command": "cd ${fileDirname} && ./${fileBasenameNoExtension}",

"group": "test"

}
]
}


코드 작성이 끝나셨으면 Ctrl + S 키를 통해 저장을 하시고,


2. 위와같이 Ctrl + Shift + D 혹은 왼쪽상단의 거미모양 아이콘을 눌러서 디버그 모드로 들어갑니다.



여기서 좌측상단에 보면 초록색 재생버튼이 보입니다. 이걸 클릭해주면 위 사진처럼 어떤 디버그 환경을 구현할지 설정하는 화면이 나옵니다. 여기서는 C와 C++을 디버깅 할 것이므로 해당하는 디버거인 GDB/LLDB 를 선택합니다.


여기까지 진행하면,



위 스크린 샷 처럼 launch.json 이 생성됩니다.


만약 코드가 아래와 같다면 그대로 두셔도 상관 없습니다만, 만약 다르다면 아래코드를 launch.json 내용물에 그대로 덮어쓰시면 됩니다.

{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}


사실 여기까지 하셨다면 디버깅환경 구현은 끝난 셈입니다. 한번 확인해볼까요?


#include <stdio.h>

int main() {

int a = 0, b = 0;

a = 10;
b = 20;

printf("%d\t%d\n",a,b);
}


3. 제일먼저 위 코드를 샘플파일로 아래와 같이 파일을 하나 만들고 입력합니다.



여기서 코드를 작성한 내용물 왼쪽에 보면 행(라인)마다 숫자가 붙어 있는 것이 보일 겁니다.

그 왼쪽에 마우스 커서를 올리면,



이렇게 빨간 동그라미가 희미하게 나타납니다. 이걸 클릭해주면 동그라미 색이 진하게 나타나고 마우스 커서를 치워도 그대로 남아있게 됩니다.

이걸 브레이크포인트 라고 부릅니다.

디버깅 환경에서 테스트를 할 때 정지해서 그때 그때 변수값이나 상태를 체크하는 지점을 설정해주는 것입니다.


4. 저는 아래와같이 4개의 브레이크포인트를 생성하였습니다.



이제 컴파일을 진행하여 주세요. 컴파일을 어떻게 해야 할 지 모르신다면 상단에 있는 링크를 통해 전에 포스팅한 컴파일 방법을 다시한번 살펴보시기 바랍니다.



위 사진처럼 정상적으로 컴파일이 되지 않고 에러 메시지가 뜬다면 launch.json 파일과 task.json 파일 수정부분을 다시한번 찬찬히 읽어보시기 바랍니다.


여기까지 진행이 완료되었다면 디버깅을 진행하는데요, 디버깅은 저번 포스팅에서 설정한 실행 커멘드를 통해서 실행하지 않고 


1.F5 키를 누르거나,

2.Ctrl + Shift + D 혹은 왼쪽 상단의 거미모양 아이콘 선택 후 위쪽에 초록색 재생버튼 클릭


이 두가지 방법을 이용해서 실행이 가능합니다.


그럼 아래같은 화면이 나옵니다.



이제 상단에 새로 생긴 디버그컨트롤러 창을 통해 아래처럼 브레이크포인트를 한번씩 이동하며 변수의 변화를 볼 수 있고,

 조사식이나 스택상태등 상당히 강력한 디버깅을 할 수 있게 되었습니다.



여기까지 따라오시느라 고생이 많으셨습니다. 다음시간부터는 본격적으로 C언어를 탐구하여 보도록 하겠습니다.

C언어 코딩을 위한 컴파일러중 가장 대표적인 코딩툴로 손꼽히는 비쥬얼 스튜디오,

이 툴은 안되는 것이 없다는 강력함을 가졌으면서도 

윈도우에서만 설치가 가능하고 우분투와 같은 리눅스, MAC OS에서는 설치가 불가능 하다는 최대 단점을 가지고 있었습니다.


막상 개발을 업으로 하고 있는 개발 전문가들 중 상당수는 윈도우가 아닌 리눅스나 MAC OS 에서 프로그래밍을 하고 있는데도 말이지요.


그래서 윈도우가 야심차게 내 놓은 무료 범용 코딩 툴이 있습니다.


우리는 이 VScode를 설치하고 샘플코드를 컴파일하여 실행이 되는 환경까지 확인하도록 하겠습니다.


해당포스팅은 Ubuntu 18.04 LTS를 기반으로 작성되었습니다.


1.컴파일 설치


C언어 개발을 위해서는 코딩 툴도 필요하지만 가장 기본적으로 컴파일러가 필요합니다.

컴파일러라 함은 C언어와 같은 고급언어를 저급언어, 즉, 바이너리 코드로 변환을 해 주는 프로그램을 뜻 합니다.


아무리 C언어 툴을 설치하고 C언어를 작성하더라도 이 컴파일러가 없으면 컴퓨터가 이해할 수 있는 언어로 변환이 불가능합니다.


리눅스에서는 이 컴파일러를 명령어 한줄로 설치가 가능합니다.

sudo apt-get install build-essential


위와 같이 설치할 패키지 명이 주르륵 보여지고 설치를 진행 할 것인지 물어보는데요, y를 입력하여 설치를 진행합니다.



그럼 이처럼 설치가 자동으로 진행이 됩니다. 다시 커멘드커서가 뜰 때 까지 기다려주신 후 아래 창을 입력하여 정상적으로 gcc가 설치되었는지 확인하여 줍니다.


gcc --help



위 사진처럼 gcc 옵션에 대한 설명이 뜬다면 정상적으로 컴파일러 설치가 완료되었다고 보셔도 무방합니다.


2. VScode 설치하기


마찬가지로 우분투에서는 굳이 홈페이지에 들어갈 필요 없이 터미널 환경에서 명령 몇줄로 설치가 가능합니다.

아래 명령을 순차적으로 따라하시면 큰 무리없이 VScode 설치가 가능합니다.


--MS의 GPG를 다운받기 위해 curl 패키지를 설치합니다.


sudo apt-get install curl


--마이크로소프트사의 GPG키를 내려받아 /etc/apt/trusted.gpg.d/ 경로에 복사합니다.


sudo sh -c 'curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft.gpg'


--VScode를 다운로드 받기 위한 저장소를 /etc/apt/sources.list.d/ 경로에 추가합니다.


sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'


--저장소 정보가 추가되었으므로 패키지 목록을 업데이트 하여 줍니다.


sudo apt-get update


--apt-get install을 통해서 VScode를 설치합니다.


sudo apt-get install code


--설치가 완료되었다면 추가하였던 저장소를 삭제합니다.


sudo rm /etc/apt/sources.list.d/vscode.list


--정상적으로 설치가 완료되면 바탕화면 아이콘 모음에 VScode아이콘이 생성된 것을 볼 수 있습니다.




3.VScode 언어 환경설정 하기


VScode를 처음 실행하면 아래처럼 온통 영어로 도배된 것을 볼 수 있습니다만, 간단한 설정으로 한국어 언어팩을 적용 할 수 있습니다.

만약 영어환경에서의 코딩을 원하시면 언어설정은 패스하셔도 무방합니다.


--VScode 첫 실행시 화면


--Ctrl+Shift+X 키를 눌러서 확장 플러그인 검색창을 띄우고 korea 입력후 Korean Language Pack for Visual Studio Code 플러그인을 설치


--플러그인이 설치되면 우측하단에 재시작을 묻는 창이 뜰겁니다. 이를 눌러서 재시작을 하여도 되고 그냥 VScode를 종료후 재시작을 하여도 됩니다.


--그럼 자동으로 한국어로 변경된 VScode를 볼 수 있습니다.


4. VScode 컴파일을 위한 컴파일러 연동 설정하기


VScode는 기본적으로 폴더를 기반으로 실행이 됩니다. 

그래서 새로운 프로젝트를 만들고 폴더를 새로 생성한다면 아래 내용이 필수적이므로 잘 보고 숙지하시는게 좋습니다.


4-1. C,C++ 컴파일을 위한 확장 플러그인 설치 및 json파일 설정


--Ctrl+Shift+X 를 눌러 확장플러그인검색창에 C 입력후 아래 플러그인 설치


--Ctrl + Shift + E 를 눌러 탐색기창을 연 후 VScode 프로젝트를 구성할 폴더를 지정하여 줍니다.저의 경우 /home/park/VScode 폴더를 생성하여 지정하였습니다.


--이어서 왼쪽상단에 설정한 폴더이름 위에 마우스 커서를 올리면 나오는 메뉴중 가장 왼쪽 메뉴를 눌러서 파일을 하나 생성합니다. 저는 hello.c 를 생성하였습니다.


--생성이 완료되면 우측에 에디터 창이 생성이 되는데요. 여기에 샘플파일로 쓸 코드를 입력하여 줍니다. 코드는 아래와 같습니다. 이후 Ctrl + S 로 저장해주세요.

#include <stdio.h>

int main() {

printf("hello\n");

return 0;
}


--Code의 메뉴화면 중 터미널 - 기본빌드 작업구성을 선택합니다.


--템플릿에서 tasks.json 파일 만들기 를 선택합니다.


-- Other 임의의 외부 명령을 실행하는 예를 선택합니다.


--이제 아래처럼 생성된 json파일이 보일겁니다.


이 코드를 아래코드로 통째로 바꿔줍니다.


{
"version": "2.0.0",
"runner": "terminal",
"type": "shell",
"echoCommand": true,
"presentation" : { "reveal": "always" },
"tasks": [
//C++
{
"label": "save and compile for C++",
"command": "g++",
"args": [
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"group": "build",



"problemMatcher": {
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
//C
{
"label": "save and compile for C",
"command": "gcc",
"args": [
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"group": "build",


"problemMatcher": {
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},

{

"label": "execute",

"command": "cd ${fileDirname} && ./${fileBasenameNoExtension}",

"group": "test"

}
]
}


4-2. 컴파일 및 실행 단축기 설정


--Code 상단 메뉴에서 파일 - 기본 설정 - 바로 가기 키 를 선택합니다. 혹은 Ctrl + K , Ctrl + S 를 순차적으로 눌러주셔도 바로가기 키 설정화면으로 넘어갑니다.


--상단에 있는 keybindings.json 을 선택합니다.


--아래코드를 아래처럼 통째로 복사해서 생성된 우측 에디터창에 넣어줍니다. 이후 Ctrl + S로 저장해줍시다.

--따로 원하시는 키가 있다면 꼭 아래 키가 아니더라도 원하는 키 조합을 "key" : "이부분"  에 입력하면 되니 참고해주세요.

[
//컴파일
{ "key": "ctrl+shift+1", "command": "workbench.action.tasks.build" },
//실행
{ "key": "ctrl+shift+2", "command": "workbench.action.tasks.test" }
]



이제 초반에 만들었던 hello.c를 다시 열어줍니다.

왼쪽 그림메뉴에 있는 파일아이콘을 눌러도 되고 혹은 Ctrl + Shift + E 를 누른 후 나오는 탐색창에서 미리 만들어둔 hello.c를 더블클릭하시면 됩니다.


방금전 설정한 컴파일 단축키를 눌러봅시다.

저의 경우 Ctrl + Shift + 1 이었습니다.

위처럼 save and compile for C 와save and compile for C++ 이 보이실 텐데요, 지금은 C 를 컴파일 할 것이므로 save and compile for C를 선택합니다.


아래화면에서 아래부분에 나오는 터미널 화면처럼 나와야 정상적으로 컴파일이 완료된 것입니다.

만약 이렇게 나오지 않는다면 다시 위에서부터 하나하나 확인하며 체크해 보시기 바랍니다.



이제 실행을 해봐야겠지요?


실행 단축기를 눌러주세요.

저의 경우 Ctrl + Shift + 2 를 설정하였습니다.

위처럼 excute가 뜰텐데요. 해당 문장을 클릭하셔도 되고 그냥 엔터를 치셔도 됩니다.


그러면 아래처럼 실행된 파일이 나올겁니다.

여기까지 문제없이 따라오셨다면 C언어를 위한 기본적인 설정은 완료된 것입니다.


VScode는 초기설정은 다른 코딩툴에 비해 까다로우나 넓은 확장성과 깔끔한 UI로 앞으로의 발전이 기대되는 툴입니다.

비주얼 스튜디오를 사용하고 싶으나 리눅스 환경이라서 사용 못하신 분들께서는 꼭 한번 설치하여 실행하여 보시길 바랍니다.


다음시간에는 VScode 디버깅을 위한 추가설정을 하도록 하겠습니다.

+ Recent posts