안녕하세요 양햄찌 블로그 주인장입니다.
오늘은 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을 눌러주면 됩니다.
오늘은 간단하게 비주얼스튜디오코드에서 디버깅 실행하는 방법에 대해 알아봤어요~!
도움이 되셨다면 좋아요 어떤가요?! 그럼 다음 포스팅에서 봐요~!!
최신 댓글