cyphen156

VS Code로 C/C++ 디버깅하기 본문

프로그래밍/C++

VS Code로 C/C++ 디버깅하기

cyphen156 2024. 9. 5. 16:39

백준과 같이 간단한 소스코드 파일 한개로 디버깅 해도 될 규모의 작은 프로젝트를 일일이 비주얼 스튜디오로 개발하는게 상당히 귀찮기도 하고 비주얼 코드에 익숙한 유저들을 위한 글이다.

우선 VS Code에서 C/C++소스 코드를 디버깅하려면 VS Code 내에서 Extension C/C++(필수)Visual Studio (20XX) | GCC/G++ | MinGW중 하나가 필요한데

나는 Windows 64bit 운영체제, Visual Studio 2022가 설치되어 있으므로 해당 환경에 대한 추가작업을 진행하겠다. 

1. VS Code내에서 다음 Extension을 설치한다.

2. Visual Studio installer를 켜고 자신의 VS 20XX버전을 선택 - 수정을 들어가 C++을 사용한 데스크톱 개발을 선택하여 설치한다.

3. Visual Studio설치되어있는 폴더와 그 안에 존재하는 DevCMD 배치파일 까지의 경로를 확인한다. 

나 같은 경우 2022를 쓰기 때문에 기본 경로가 다음과 같이 구성되어있다. 

"C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"

만약 이전 버전의 경우 Visual Studio가 Program Files(x86)폴더 안에 위치하고 있을 수 있다. 꼭 확인해보자.

4. VS Code 작업 폴더 내에 존재하는 히든폴더 .vscode안에 파일을 두개 생성해야 한다.

첫 번째 파일은 build 구성 파일로 tasks.json이라는 파일이다. 다음코드를 복사해 기입하고 저장한다.

{
    "type": "shell",
    "label": "C/C++: cl.exe 활성 파일 빌드",
    "command": "cl.exe",
    "args": [
        "/Zi",
        "/EHsc",
        "/nologo",
        "/Fe${fileDirname}\\${fileBasenameNoExtension}.exe",
        "${file}"
    ],
    "options": {
        "cwd": "${fileDirname}"
    },
    "problemMatcher": [
        "$msCompile"
    ],
    "group": {
        "kind": "build",
        "isDefault": true
    },
    "detail": "컴파일러: cl.exe"
}

두번째 파일은 실행시 사용할 빌드를 설정하는 launch.json이다.

{
    // IntelliSense를 사용하여 가능한 특성에 대해 알아보세요.
    // 기존 특성에 대한 설명을 보려면 가리킵니다.
    // 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요.
    "version": "0.2.0",
    "configurations": [
        
        {
            "name": "C/C++: cl.exe build and debug active file",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "console": "externalTerminal",
            "preLaunchTask": "cl.exe build active file"
        }
    ]
}

두 파일을 모두 생성하였다면 실행할 소스코드를 열고 ctrl + shift + b를 눌러 빌드 하거나 F5를 눌러 디버깅을 시작해보자. 

바로 되면 좋겟지만 만약 실행되지 않는다면 시스템 환경변수에 존재하는 Path에 cl.exe/(위에서 등록한 배치파일 경로)에 대한 경로가 존재하지 않아서 VS코드가 외부 실행기를 실행시키지 못해서 그렇다.

환경변수를 수정하는 방법도 있지만 나는 조금 다른 방법인 Visual Studio 개발자 커맨드 프롬프트를 통해 직접 경로를 등록시킬것이다.

Windows의 검색을 통해 Developer Command Prompt for VS 2022 CMD를 실행시킨다.

이 CMD창에서 명령어 code .를 입력하면 VS Code창이 실행된다. 

이후 set명령어를 입력하면 사용중인 IDE에 대한 설정이 주루륵 나온다. 

실행시 나오는 전체 정보는 다음과 같다. 

더보기
C:\Program Files\Microsoft Visual Studio\2022\Community>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\dbdxo\AppData\Roaming
CommandPromptType=Native
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=LABTOP01
ComSpec=C:\Windows\system32\cmd.exe
DevEnvDir=C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\
DriverData=C:\Windows\System32\Drivers\DriverData
EFC_2324=1
ExtensionSdkDir=C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs
EXTERNAL_INCLUDE=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\ATLMFC\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include;C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\shared;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\winrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\cppwinrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um
Framework40Version=v4.0
FrameworkDir=C:\Windows\Microsoft.NET\Framework\
FrameworkDir32=C:\Windows\Microsoft.NET\Framework\
FrameworkVersion=v4.0.30319
FrameworkVersion32=v4.0.30319
FSHARPINSTALLDIR=C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools
HOMEDRIVE=C:
HOMEPATH=\Users\dbdxo
INCLUDE=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\ATLMFC\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include;C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\shared;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\winrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\cppwinrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um
LIB=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\ATLMFC\lib\x86;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\lib\x86;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\ucrt\x86;C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x86
LIBPATH=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\ATLMFC\lib\x86;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\lib\x86;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\lib\x86\store\references;C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.22621.0;C:\Program Files (x86)\Windows Kits\10\References\10.0.22621.0;C:\Windows\Microsoft.NET\Framework\v4.0.30319
LOCALAPPDATA=C:\Users\dbdxo\AppData\Local
LOGONSERVER=\\LABTOP01
NETFXSDKDir=C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\
NUMBER_OF_PROCESSORS=12
OneDrive=C:\Users\dbdxo\OneDrive
OS=Windows_NT
Path=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\bin\HostX86\x86;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\VCPackages;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer;C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\bin\Roslyn;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools;C:\Program Files\Microsoft Visual Studio\2022\Community\Team Tools\DiagnosticsHub\Collector;C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\\x86;C:\Program Files (x86)\Windows Kits\10\bin\\x86;C:\Program Files\Microsoft Visual Studio\2022\Community\\MSBuild\Current\Bin\amd64;C:\Windows\Microsoft.NET\Framework\v4.0.30319;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Microsoft SQL Server\150\Tools\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;C:\Program Files\dotnet\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Git\cmd;C:\Users\dbdxo\AppData\Local\Microsoft\WindowsApps;C:\Users\dbdxo\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\dbdxo\.dotnet\tools;C:\Users\dbdxo\AppData\Local\GitHubDesktop\bin;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\Llvm\bin;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\Linux\bin\ConnectionManagerExe;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\vcpkg
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 158 Stepping 10, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=9e0a
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\dbdxo\AppData\Local\Temp
TMP=C:\Users\dbdxo\AppData\Local\Temp
UCRTVersion=10.0.22621.0
UniversalCRTSdkDir=C:\Program Files (x86)\Windows Kits\10\
USERDOMAIN=LABTOP01
USERDOMAIN_ROAMINGPROFILE=LABTOP01
USERNAME=dbdxo
USERPROFILE=C:\Users\dbdxo
VCIDEInstallDir=C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\
VCINSTALLDIR=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\
VCPKG_ROOT=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\vcpkg
VCToolsInstallDir=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\
VCToolsRedistDir=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\14.40.33807\
VCToolsVersion=14.41.34120
VisualStudioVersion=17.0
VS170COMNTOOLS=C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\
VSCMD_ARG_app_plat=Desktop
VSCMD_ARG_HOST_ARCH=x86
VSCMD_ARG_TGT_ARCH=x86
VSCMD_VER=17.11.2
VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio\2022\Community\
VSSDK150INSTALL=C:\Program Files\Microsoft Visual Studio\2022\Community\VSSDK
VSSDKINSTALL=C:\Program Files\Microsoft Visual Studio\2022\Community\VSSDK
windir=C:\Windows
WindowsLibPath=C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.22621.0;C:\Program Files (x86)\Windows Kits\10\References\10.0.22621.0
WindowsSdkBinPath=C:\Program Files (x86)\Windows Kits\10\bin\
WindowsSdkDir=C:\Program Files (x86)\Windows Kits\10\
WindowsSDKLibVersion=10.0.22621.0\
WindowsSdkVerBinPath=C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\
WindowsSDKVersion=10.0.22621.0\
WindowsSDK_ExecutablePath_x64=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\
WindowsSDK_ExecutablePath_x86=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\
__DOTNET_ADD_32BIT=1
__DOTNET_PREFERRED_BITNESS=32
__VSCMD_PREINIT_PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Microsoft SQL Server\150\Tools\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;C:\Program Files\dotnet\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Git\cmd;C:\Users\dbdxo\AppData\Local\Microsoft\WindowsApps;C:\Users\dbdxo\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\dbdxo\.dotnet\tools;C:\Users\dbdxo\AppData\Local\GitHubDesktop\bin

여기서 우리에게 필요한 것을 정리하자면 다음과 같다. 

 "options": {
                "env": {
                    "INCLUDE": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\include;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22621.0\\ucrt;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22621.0\\um;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22621.0\\shared;",
                    "LIB": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\lib\\x64;C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.22621.0\\ucrt\\x64;C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.22621.0\\um\\x64;",
                    "LIBPATH": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\lib\\x64;",
                    "PATH": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\bin\\Hostx64\\x64;C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\VC\\VCPackages;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\"
                }
            }

라이브러리 경로와 실행환경 경로를 직접 가져올 수 있게 tasks.json파일에 집어넣어주자. 

최종 코드 내용은 다음과 같다.

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "cl.exe build active file",
            "type": "shell",
            "command": "cl.exe",
            "args": [
                "/Zi",
                "/EHsc",
                "/Fe:${fileDirname}\\${fileBasenameNoExtension}.exe",
                "${file}"
            ],
            "problemMatcher": [
                "$msCompile"
            ],
            "group": "build",
            "options": {
                "env": {
                    "INCLUDE": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\include;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22621.0\\ucrt;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22621.0\\um;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22621.0\\shared;",
                    "LIB": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\lib\\x64;C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.22621.0\\ucrt\\x64;C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.22621.0\\um\\x64;",
                    "LIBPATH": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\lib\\x64;",
                    "PATH": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\bin\\Hostx64\\x64;C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\VC\\VCPackages;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\"
                }
            }
        },
        {
            "type": "cppbuild",
            "label": "C/C++: cl.exe 활성 파일 빌드",
            "command": "cl.exe",
            "args": [
                "/Zi",
                "/EHsc",
                "/nologo",
                "/Fe${fileDirname}\\${fileBasenameNoExtension}.exe",
                "${file}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "디버거에서 생성된 작업입니다."
        }
    ]
}

이제부터는 F5키를 통해 디버깅을 수행할 수 있게되고, 디버깅을 시작하면 다음과 같이 파일이 여러개 생성되면서 빌드가 수행된다.

파일이 생기는 이유는 C/C++가 컴파일 언어라서 그렇다. 소스코드를 obj로 변환하고 링커와 함께 엮어서 실행파일인 exe까지 생성되어야 프로그램이 실행되기 때문이다.

이 파일들이 계속 생성되다 보면 프로젝트가 지저분해지기 때문에 한곳에 몰어넣고, 깃허브에도 올라가지 않도록 .gitignore에 등록할 것이다.

위에서 tasks.json파일 내용을 찾아보면 Fo라는 옵션이 존재한다. 해당 옵션은 obj파일의 생성 경로를 의미하는것으로 해당옵션을 따로 지정해주면 된다. 나는 tmp폴더에 obj,pdb, lnk, exe를 모두 몰아넣고 실행되도록 하겠다.

우선 디렉토리 생성 명령어다. 

{
    "label": "Make tmp directory",
    "type": "shell",
    "command": "powershell",
    "args": [
        "-Command", "if (-Not (Test-Path tmp)) { New-Item -ItemType Directory -Path tmp }"
    ],
    "problemMatcher": []
},

그리고 생성된 폴더에 다른 실행파일들을 위치시키는 명령어다. 루트 워크스페이스 하위 tmp안에 생성하도록 만들었다.

 "args": [
            "/Zi",
            "/EHsc",
            "/Fe:${workspaceFolder}\\tmp\\${fileBasenameNoExtension}.exe",  // 실행 파일을 상위 tmp 폴더에 생성
            "/Fo:${workspaceFolder}\\tmp\\${fileBasenameNoExtension}.obj",  // obj 파일을 상위 tmp 폴더에 생성
            "/Fd:${workspaceFolder}\\tmp\\${fileBasenameNoExtension}.pdb",  // pdb 파일을 상위 tmp 폴더에 생성
            "${file}"
        ],

이대로는 프로그램이 실행되지 않는다. 빌드했을 때 실행시킬 실행파일이 다른 위치에 생성되었기 때문에 Launch.json에서 실행 파일 경로도 바꿔줘야 한다. 이쁘게 몰아 생성되었다. 

마지막으로 할 일은 깃허브에 올라가지 않도록 .gitignore에 등록하는것이다. 

루트 디렉토리에 .gitignore 파일을 생성하고, 다음 코드를 집어넣자. 간단하게 폴더이름만 써넣으면 된다.

tmp

하다보니 긴 글이 되었는데 나같은 바보짓하는사람이 또 있을까 싶지만 그래도 혹시몰라 글을 남긴다.

최종 코드들은 다음과 같다.

workspace/.gitignore

tmp

workspace/.vscode/launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++: cl.exe build and debug active file",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceFolder}\\tmp\\${fileBasenameNoExtension}.exe",  // 상위 tmp 폴더에서 실행
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "console": "internalConsole",
            "preLaunchTask": "cl.exe build active file"
        }
    ]
}

workspace/.vscode/tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Make tmp directory",
            "type": "shell",
            "command": "powershell",
            "args": [
                "-Command", "if (-Not (Test-Path tmp)) { New-Item -ItemType Directory -Path tmp }"
            ],
            "problemMatcher": []
        },
        {
            "label": "cl.exe build active file",
            "type": "shell",
            "command": "cl.exe",
            "args": [
                "/Zi",
                "/EHsc",
                "/Fe:${workspaceFolder}\\tmp\\${fileBasenameNoExtension}.exe",  // 실행 파일을 상위 tmp 폴더에 생성
                "/Fo:${workspaceFolder}\\tmp\\${fileBasenameNoExtension}.obj",  // obj 파일을 상위 tmp 폴더에 생성
                "/Fd:${workspaceFolder}\\tmp\\${fileBasenameNoExtension}.pdb",  // pdb 파일을 상위 tmp 폴더에 생성
                "${file}"
            ],
            "options": {
                "cwd": "${fileDirname}",
                "env": {
                    "INCLUDE": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\include;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22621.0\\ucrt;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22621.0\\um;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22621.0\\shared;",
                    "LIB": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\lib\\x64;C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.22621.0\\ucrt\\x64;C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.22621.0\\um\\x64;",
                    "LIBPATH": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\lib\\x64;",
                    "PATH": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.41.34120\\bin\\Hostx64\\x64;C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\VC\\VCPackages;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\"
                }
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "dependsOn": "Make tmp directory",  // 빌드 전에 tmp 폴더 생성
            "detail": "컴파일러: cl.exe"
        }
    ]
}

+++만약 명령프롬프트가 새 창으로 뜨지 않게 하고 싶다면 launch.json파일 내의 "console": "externalTerminal",

 "console": "internalConsole",로 변경하면 된다. 그러고 나면 디버그 콘솔에서 프로그램을 제어할 수 있다.