본문 바로가기
Ide 뚝딱뚝딱/VSCode

[VSCode] VSCode에서 C/C++ 실행 및 디버깅하기

by veggie-garden 2022. 2. 24.

VSCode에서 C/C++을 사용하려면 별도의 조치가 필요하다. 이 단계들이 조금 번거롭기에, C를 주력으로 사용하는 사람이라면 Visual Studio를 쓰는 것을 권장한다. 설치만 하면 별도의 조치 없이 바로 사용할 수 있으나, 프로그램 조금 무거운 것이 흠이다. 나는 C/C++로 개발할 것도 아니고, 단순 알고리즘 공부 용으로 C를 사용하기 때문에 기존에 사용하던 VSCode를 계속 사용하고 싶었다. (실은 다 필요 없고 vim을 사용해도 되긴 한다. vim 최고(?!)) 서론은 이쯤 하고, 본론으로 들어가겠다. 

1. Msys2 설치

https://www.msys2.org/

 

MSYS2

Software Distribution and Building Platform for Windows

www.msys2.org

우선 위의 웹사이트에 가서 MSYS2를 설치해야 한다. 

최소 사양은 64bit Window 7이라고 하니 참고하도록 하자. 파일 크기가 좀 큰지 까는데 시간이 좀 걸렸다. exe 설치 완료 후 실행하자. 실행하면 setup 창이 뜨는데, 딱히 따로 건드려야 하는 것은 없으니 계속 next 만 누르면 된다. Finish를 누른다고 설치가 끝난 것이 아니다. MSYS2 MSYS를 실행하도록 하자. (만약 아무것도 안 건들었다면 자동으로 Msys2가 실행될 것이다.)

 

짠 msys2 터미널이다

 

그다음 아래의 명령어를 복붙 하자. 

pacman -Syu

 

그럼 설치한다고 여러 문구들이 주르륵 뜰 텐데 Y를 누른 후 계속 진행하면 된다. 중간에 한 번 설치를 위해서 터미널을 종료한다는 문구가 나오는데 Y를 누르면 터미널이 종료된다.

 

요거 실행하면 된다

 

그럼 다시 MSYS2를 실행한 뒤, 설치 완료 후 이제 아래의 명령어를 실행하라.

 

pacman -Su

 

이 명령어 또한 문구들이 주르륵 뜨다가 Y/N을 누르라고 뜬다. 역시 Y를 누르고 계속 진행하면 MSYS2 설정은 끝이다. 

 

2. mingw64 설치

pacman -S --needed base-devel mingw-w64-x86_64-toolchain

 

이제 mingw64를 설치해야 하는데, mingw64 안에 gcc, g++ 등 컴파일러들이 포함되어 있다. 그럼 뭐 여러 가지가 뜨는데 엔터 치면 문구에 나온 것들이 다 설치되는 것이고 숫자들을 골라 입력하면 그것들만 설치된다. 나는 귀찮아서 다 설치했다. 

 

3. 환경 변수 설정

환경 변수의 Path를 수정해야 한다. 우선 시스템 환경 변수 편집에 가자. 

시스템 속성의 고급 창이 열릴 것이다. 하단의 환경 변수를 클릭하자. 

그럼 아래와 같이 환경 변수가 뜨는데, 시스템 변수의 Path를 선택한 뒤 편집을 클릭해라. 

새로 만들기를 클릭한 뒤, msys64의 설치 경로를 복붙 하면 하면 된다. 아까 msys64를 설치할 때 따로 경로 설정을 하지 않았다면 C 드라이브에 설치된다. 각자 msys64의 설치 경로를 찾아 아래와 같이 복붙 하면 된다. 

C:\msys64\mingw64\bin

 

그다음 확인을 눌러 편집창을 끈다. 열려 있는 모든 환경 변수 창을 확인으로 꺼야 한다. 그냥 끄면 변경 사항이 수정되지 않는다. 유의하도록 하자. 

 

설치가 제대로 되었는지 확인하는 방법: 

더보기

윈도우 + r을 눌러 cmd 창 열기. 

열린 cmd 창에 아래의 명령어 입력.

gcc -v
g++ -v
gdb -v

설치가 정상적으로 되었다면 gcc, g++, gdb의 버전을 출력할 것이고 아니라면 해당 명령어는 실행할 수 없다고 뜬다. 

 

4. VSCode extension 설치

이 extension을 설치한 뒤, 작업하고 있는 c 파일이 있는 폴더를 open folder로 열라. 그다음 F1을 눌러 C/C++: Edit Configurations (JSON)을 클릭해라. 그럼 c_cpp_properties.json라는 파일이 생성될 것이다. 그 파일을 아래와 같이 수정하라. 

 

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                // msys64 설치 경로에 따라 수정할 것
                "C:/msys64/mingw64/include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.18362.0",
            // msys64 설치 경로에 따라 수정할 것
            "compilerPath": "C:/msys64/mingw64/bin/gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            // windows-msvc-x64 에서 아래와 같이 변경
            "intelliSenseMode": "windows-gcc-x64"
        }
    ],
    "version": 4
}

 

5. tasks.json

똑같이 F1을 눌러 Task: Configure Task -> Create tasks.json file from template -> Others 선택, 그럼 tasks.json 파일이 생성된다. 그럼 아래와 같이 수정하면 된다. 

 

{
  "version": "2.0.0",
  "runner": "terminal",
  "type": "shell",
  "echoCommand": true,
  "presentation": {
      "reveal": "always"
  },
  "tasks": [
    // c++ compile
    {
      "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 comile
    {
      "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": "cmd",
      "group": "test",
      "args": [
        "/C",
        "${fileDirname}\\${fileBasenameNoExtension}"
      ]
    },
    // 파일 빌드
    {
      "type": "cppbuild",
      "label": "C/C++: gcc.exe build active file",
      "command": "C:\\msys64\\mingw64\\bin\\gcc.exe",
      "args": [
        "-fdiagnostics-color=always",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\${fileBasenameNoExtension}.exe"
      ],
      "options": {
        "cwd": "C:\\msys64\\mingw64\\bin"
      },
      "problemMatcher": [
        "$gcc"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "compiler: C:\\msys64\\mingw64\\bin\\gcc.exe"
    }
  ]
}

 

6. 단축키 설정 (생략 가능)

편의를 위해 단축키를 변경하는 것이니 이 단계는 따라 하지 않아도 된다. 

 

우선 ctrl+k+s를 눌러 단축키 설정 창을 열어준다. 

빌드 단축키는 ctrl+alt+c로, 실행은 ctrl+alt+r로 변경했다. 만약 변경하지 않았다면, 빌드 단축키는 ctrl+shift+b, 실행은 아마 ctrl+F5일 것이다. (빌드 단축키는 확실하나, 나는 처음부터 변경한 상태로 사용했기에 실행 단축키가 저것인지는 확실하지 않다. 아마 맞을 것이다.) 

 

이제 파일을 실행해보도록 하자. 만약 실행할 파일이 없다면 *.c로 끝나는 파일을 생성한 뒤 아래의 코드로 복붙 하라. 

 

#include <stdio.h>

int main(void)
{
    printf("Hello World!");
    
    return 0;
}

 

ctrl+alt+c를 눌렀더니 정상적으로 파일이 빌드되었다. 

 

그 상태에서 ctrl+alt+r을 눌렀더니 실행이 바로 뜬다. 

엔터를 누르니 제대로 잘 실행되는 것을 볼 수 있다. 

 

7. 디버깅

디버깅을 하려면 launch.json 파일이 필요하다. 

 

Run -> Add Configuration (영문판) / 실행 -> 구성 추가 (한글판)를 클릭, C++ (GDB/LLDB) -> (c면 gcc, c++이면 g++, 둘 다 사용한다면 g++).exe - Build and debug active file를 클릭하면 launch.json 파일이 자동으로 아래와 같이 생성된다. (나는 VSCode 언어가 영문이라 사진에 하이라이트 된 부분이 영어로 된 것이고, 만약 언어 설정이 한국어로 되어있다면 저 부분이 한국어로 생성된다. 중요한 것이 아니기 때문에 사진과 다르다고 당황하지 말자. 자동으로 생성된 상태대로 사용하면 된다.)

 

만약 자동으로 생성이 안된다면 아래의 코드를 복붙한 뒤 경로를 수정하라.

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "gcc.exe - Build and debug active file",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "C:\\msys64\\mingw64\\bin", # 각자 msys64\\mingw64\\bin의 경로에 맞게 수정
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe", # 여기도 경로에 맞게 수정
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        },
        {
          "description": "Set Disassembly Flavor to Intel",
          "text": "-gdb-set disassembly-flavor intel",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "C/C++: gcc.exe build active file"
    }
  ]
}

 

기본적으로 디버깅 단축키는 F5이다. 만약 디버깅 단축키를 변경했다면 변경한 단축키를 누르면 된다. (나는 c extension을 사용하기 이전에 디버깅 없이 시작을 F5, 디버깅 시작을 ctrl+F5으로 변경했었다는 걸 잠시 까먹고, 계속 F5누르면서 왜 디버깅이 안되지 이러고 있다가 뒤늦게 바꿨다는 사실이 떠올라 잠시 머리를 쥐어뜯었다.)

 

후일담

여기까지 진행하느라 고생했다! Visual Studio를 쓰면 훨씬 편하게 코드를 실행하고 디버깅할 수 있는데, 나는 자주 쓰는 IDE가 VSCode라 어쩔 수 없이 이 고생을 했다. 만약 C를 주력으로 사용하는 사람이라면 Visual Studio를 쓰도록 하자. 

 


참고:

1. https://jhnyang.tistory.com/430

 

[VSC 비주얼스튜디오코드] VScode에서 C/C++ 디버깅하는 방법, 디버깅 실행 안될 때 설정

안녕하세요 양햄찌 블로그 주인장입니다. 오늘은 VSC 에디터에서 C/C++ 디버깅하는 법에 대해 작성해보려고 해요. Visual Studio Code에서 C/C++ 디버깅 실행하기 비주얼스튜디오 코드는 디버깅 모드를

jhnyang.tistory.com

2. https://codesyun.tistory.com/89

 

[Visual Studio Code] VS Code C / C++ 컴파일, 실행, 디버깅

보다 간단한 방법인 Code Runner 사용에 관한 글도 하단에 링크 달아두었습니다! 1. C / C++ 컴파일 컴파일러의 종류 gcc : C언어를 컴파일 할 수 있는 컴파일러 g++ : C++을 컴파일 할 수 있는 컴파일러 컴

codesyun.tistory.com

 

'Ide 뚝딱뚝딱 > VSCode' 카테고리의 다른 글

[VSCode] ESLint + prettier 사용하기  (0) 2021.11.13

댓글