VS Code C++ 실행/디버깅 편하게 하기 + 백준을 위한 redirection setup

sycho·2025년 1월 24일
1

cs-tips

목록 보기
17/17

알고리즘 문제를 풀 환경을 설정하다가 유용한 것 같아서 그리고 내가 나중에 까먹을 것 같아서 공유한다.

검색하면 자주 보이는 CodeRunner을 사용하는 것이 아니라 C/C++ Runner이라는 확장자를 활용하는 방식이다. 매우 유용한 확장자라서 굳이 이 용도가 아니더라도 본인 용도에 맞게 사용하면 될 것 같다.

g++ 설치와 같은 기본 실행 환경은 갖췄다고 가정. 그리고 확장자에 설명으로 나와있지만 아무도 안 읽을 것 같으니 PATH에다가 본인의 compiler 경로를 지정해놓아야 한다.

윈도우라면 이 글을, 리눅스라면 이 글을 참고해 설치하자.

사실 위의 글들은 잘 되는지 확인 안 했으니 잘 안되면 구글 검색을 해서 어떻게든 해보자. 죄송합니다.

실행

먼저 확장자를 설치한다.

사실 이후 확장자에 있는 설명을 읽으면 됩니다...라고 퉁쳐도 되지만 보통 설명서는 읽기 귀찮으니...

저거를 설치하고 나면 다음과 같은 4개의 버튼이 밑의 바에 보이게 된다.

각각 build, run, debug, build 삭제라고 생각을 하면 된다.

저 4개의 버튼 바로 좌편에도 버튼이 하나 있다.

저건 build 모드를 설정하는 건데 Debug랑 Release가 있다.

이제 프로그램을 어떻게 실행하냐면... 설정 버튼을 누르면 그냥 build가 된다.

저렇게 build를 하고 재생 버튼을 누르면 실행이 된다.

디버깅 환경 설정

위와 같은 마술...이 되는 이유는 사실 저 확장자를 설치하고 난 다음에 프로젝트를 만들면 settings.json이라는 파일이 나오기 때문이다. 저 파일이 생성되는 조건은 현 VSCode 창을 연 디렉토리(root directory)에 cpp파일이 존재하는 경우다.

.json 파일에서 컴파일 옵션 등등을 설정하는 것이 가능하다. 이 중 디버깅 환경을 설정하려면 -g option을 컴파일 옵션에 넣어야 변수 정보 등을 넣을 수 있다.

그래서 C_Cpp_Runner.compilerArgs라는 field를 settings.json에 찾아가지고 다음과 같이 compiler argument를 넣도록 하자.

이렇게 문자열 형식으로 넣으면 된다. 이후 다시 설정 버튼을 눌러 build하고, 실험 삼아 breakpoint를 하나 넣고, 아까 4개의 버튼 중 벌레 버튼을 누르거나 VS Code 왼쪽의 디버깅 실행을 통해 실행을 하면 쉽게 디버깅을 할 수 있다.

Redirection 설정

컴파일러 옵션을 조금만 응용해서, I/O redirection도 원활할 수 있도록 설정해보자. 백준같은 PS에서 디버깅을 원활히 하기 위해서 말이다.

freopen을 쓰면 redirection을 편하게 할 수 있다. 하지만 제출을 할 때마다 주석 처리를 하는 것이 너무 귀찮다.

매크로와 컴파일러 옵션을 설정하면 이를 원활히 할 수 있다.

앞의 C_Cpp_Runner.compilerArgs에다가 -D(매크로이름)을 만들어 놓는다.

다음으로 코드를 다음과 같이 짜면 된다.

#ifdef (매크로이름)
...
#endif

이번 예제 같은 경우 밑과 같이 말이다.

#ifdef REDIRECT_IO
void input_redirection() {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
}
#endif
...
int main() {
...
#ifdef REDIRECT_IO
    input_redirection();
#endif
...
	return 0;
}

그리고 input.txtoutput.txtmain.cpp가 있는 경로에 저장해놓으면 된다. 이후 디버깅이든 일반 실행이든 수행을 하면, input.txt에 따라 output.txt에 결과물이 출력됨을 확인할 수 있다.

예제의 문제는 백준 15500번이다.

이러면 주석 처리를 따로 하지 않고 백준에 그대로 제출을 해도 문제가 없다. 답이 맞다면 말이다.

profile
안 흔하고 싶은 개발자. 관심 분야 : 임베디드/컴퓨터 시스템 및 아키텍처/웹/AI

0개의 댓글