본문 바로가기

별걸다하는 IT/개발환경 세팅&TIPS

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

반응형

안녕하세요 양햄찌 블로그 주인장입니다.

오늘은 VSC 에디터에서 C/C++ 디버깅하는 법에 대해 작성해보려고 해요.

Visual Studio Code에서 C/C++ 디버깅 실행하기

비주얼스튜디오 코드는 디버깅 모드를 지원하는데요,

저기 빨간색 네모칠 해놓은 아이콘이 RUN&DEBUG입니다. 해당 모드는 'Ctrl+shift+D' 단축키를 통해 이동할 수도 있어요. D는 debug의 약자같죠?ㅎㅎ 

 

참고로 C/C++ 디버깅 모드를 사용하시려면 C/C++ 익스텐션과 C컴파일러가 미리 설치되어있어야합니다.

요고~~~~~~ 익스텐션 관련 글은 따로 포스팅해두었으니 필요하신 분은 해당 게시글을 참고해주세요.

 

비주얼스튜디오코드 관련 글이 이렇게 많다는...

★ 사전 수행되어 있어야할 포스팅

컴파일러 설치 바로가기 : 윈도우에서 C/C++ 컴파일과 빌드를 위한 MSYS2 설치하기, MSYS2란 무엇인가? (tistory.com)

C/C++ 개발환경 세팅: [VSCode] C/C++ 개발환경 세팅하기, 비주얼코드 c_cpp_properties.json, tasks.json 설정 (tistory.com)

암튼 디버그 실행은 F5입니다. F5를 누르면 이렇게 Select Environment 창이 뜨는데, 디버그에 사용될 디버거를 선택해주면 돼요. 저는 GCC쓰니까 GDB를 클릭해줬습니다.

GDB는 gcc나 g++로 컴파일할때 -g옵션을 주면 생성되는 디버깅 정보로 동작하는 가장 기본적인 디버거예요.

C++이라면 g++을 C언어라면 gcc.exe를 선택해줍시당

 

한 번 설정하면 환경설정파일에 세팅되어서 다시 선택할 필요는 없습니다.

여기까지 누르면 디버깅이 처음으로 되면서 자동으로 lauch.json이라는 파일이 열리는데요

{
    // 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": "g++.exe - 활성 파일 빌드 및 디버그",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\Program Files\\msys64\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "gdb에 자동 서식 지정 사용",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "g++ build"
        }
    ]
}

"miDebuggerPath""D:\\Program\\MinGW\\bin\\gdb.exe",

해당 부분이 우리가 선택한 디버거로 위치설정이 잘 되어있는지 한 번 체크해줍시다.

저는 C/C++컴파일러로 MinGW를 설치했는데요 설치할 때 위치를 임의로 변경해서 D 드라이브에 깔려있는데 보통은 C드라이브에 깔려있으실 거예요.

 

"preLaunchTask": 디버그 하기 전에 컴파일 수행할 수 있도록 tasks.json의 c++ 빌드 label 명을 붙여줍시다.

tasks.json 작성을 어떻게 하셨나에 따라 달라질 수 있어요. 전 "g++ build"로 라벨을 지어줬기 때문에~ 해당 라벨명을 적어줬어요.

다시 한 번 F5를 눌러서 디버깅시도해보면, 이렇게 디버깅이 잘 되면서 DEBUG CONSOLE창에 로그를 남기는 것을 확인할 수 있습니다. 

중단점 설정된 모습

breakpoint만드는 단축키는 F9이예요 VS 단축키랑 똑같죠?ㅎㅎ 

편집창 부분의 화살표를 보시면 저렇게 빨간점으로 중단점이 잘 설정된 것을 볼 수 있어요. 

만약 디버깅시 문제가 있다면 이렇게 디버그 결과 에러를 쭉 보여줍니다.ㅎㅎ

디버깅 실행되지 않을 때

중단점이 찍히지 않거나 디버그모드 실행조차 안될때, 확인해봐야하는 설정파일들을 알아볼거예요.

보통 그냥 따로 설정안해도 자동적으로 세팅돼서 디버깅모드 잘 실행되는데, 설정이 안됐을 수도 있으니까요.

 

1. tasks.json 확인

먼저 디버깅 정보를 만드는 -g 옵션이 설정되어있지 않을수도 있습니다. 이는 tasks.json파일에서 확인해볼 수 있어요.

파일을 찾는 ctrl+p 단축키를 누른 후 tasks.json을 검색해서 열어줍시다.

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "runner": "terminal",
    "tasks": [
        //C++컴파일
        {
            "label": "g++ build",
            "type": "shell",
            "command": "g++",
            "args": [
                "-g",
                "${fileDirname}\\**.cpp",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "problemMatcher": ["$gcc"],
            "group": "build"
        },
        //c컴파일
        {
            "label": "gcc build",
            "type": "shell",
            "command": "gcc",
            "args": [
                "-g",
                "${fileDirname}\\**.cpp",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "problemMatcher": ["$gcc"],
            "group": "build"
        },
        //실행
        {
            "label": "execute",
            "command": "cmd",
            "group": "test",
            "args": [
                "/C", "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ]
        }
    ]
}

내용은 이렇게 되어있는데, 저기 "args"에 "-g"가 있어야 합니다. 없으신 분은 -g를 추가해주세요.

 

2. launch.json

앞에서 언급하긴 했는데 launch.json파일의 디버거 경로가 잘 잡혀있어야 합니다.

마찬가지로 ctrl+p단축키로 launch.json을 열어서 "minDebuggerPath"가 잘 잡혀있는지 확인해주세요.

{
    // 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": "g++.exe - 활성 파일 빌드 및 디버그",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\Program\\MinGW\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "gdb에 자동 서식 지정 사용",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe 활성 파일 빌드"
        }
    ]
}

저는 경로를 따로 재설정해서 MinGW를 다운받은거기 때문에 MinGW가 어디에 설치되어있는지 경로확인을 해야합니다. 

또한 해당 경로에 gdb.exe가 있는지 체크해주기!

 

3. MinGW Path제대로 환경변수에 들어가 있는지 확인하기

사실 디버깅이 아닌, 실행이 잘 된다면 3번은 확인할 필요가 없습니다.

다만 컴파일러 경로가 제대로 안잡혀있어서 코드 실행조차 되지 않는다면 당연히 디버깅도 실행되지 않겠죠.

환경변수편집에 들어가서 시스템 변수의 Path를 한 번 확인해줍시다.

MinGW를 네트워크 상태에서 설치를 진행했으면 Path를 자동으로 잡아주는데,

컴파일러를 압축풀기로 수동 설치했을 경우 Path를 따로 잡아줘야하거든요. 혹시 이 과정에서 빼먹었을 수도 있으니~

msys64일 경우에는 mingw가 msys64내부에 들어가 있을 수도 있어요.

msys64이던 그냥 mingw이던 해당 경로 탐색기에 열어서 gcc.exe나 g++.exe가 있는지 역시 또 확인을 해줍시다.

빌드/컴파일/디버깅 관련 단축키 

디버깅 단축키 참고하시라구 마지막으로 남겨봅니다. 

 

 디버그 시작 F5

디버그 모드로 실행하기~

 

 중단점 설정 F9

break 포인트 설정. 디버깅을 시작하고 싶은 부분과 끝내고 싶은 부분을 지정할 수 있는게 중단점입니당

 

■ 디버깅 줄 단위로 실행 F10, F11

F10은 줄 단위로 실행하다가 함수 호출부를 만나면 함수 안으로 들어가지 않고 다음 라인을 실행합니다(step over).

반면 F11은 함수 호출부를 만나면 함수 정의부로 넘어가서 다시 라인 단위로 차근차근 실행(step into).

 

■ 디버깅 하고 있는 현재 함수 빠져나오기 Shift + F11

Step out에 해당하는 단축키예요. F11로 라인 바이 라인 가면서 확인하다가 원하는 값 다 확인했으면 이 이후 함수 로직은 안보고 다음 프로시저로 넘어가고 싶겠죠? 즉 해당 프로시저를 나가고 싶을 때에는 shift + F11을 눌러주면 됩니다.

 

오늘은 간단하게 비주얼스튜디오코드에서 디버깅 실행하는 방법에 대해 알아봤어요~! 

도움이 되셨다면 좋아요 어떤가요?! 그럼 다음 포스팅에서 봐요~!!

반응형