DEV Community

Sang-moon, Lee
Sang-moon, Lee

Posted on

VS Code의 launch.json: 디버깅을 더 똑똑하게 사용하는 방법

launch.json

들어가며

프로그래밍할 때 "디버깅"은 우리와 떼려야 뗄 수 없는 관계이다. 오류를 추적하고 문제를 해결하는 과정에서 디버깅 도구는 개발자의 생산성을 높여준다.
Visual Studio Code(VS Code)는 초보자도 쉽게 디버깅 환경을 설정할 수 있도록 도와주는 강력한 기능이 있다. 그 핵심은 바로 launch.json 파일이다. 이 글에서 launch.json이 무엇이고, 어떻게 활용할 수 있는지 정리해보고자 한다. 예제 코드를 통해 하나하나 뜯어보며 디버깅 환경을 구축하는 법을 확인해보자.

주요 개념 설명

launch.json은 VS Code의 디버깅 구성 파일이다.
이 파일을 통해:

  • 어떤 프로그램을 디버깅할지
  • 프로그램 실행 시 필요한 설정(예: 명령줄 인수나 환경 변수)
  • 디버거가 사용하는 추가 명령 등 을 상세히 정의할 수 있다.

비유하자면, launch.json은 무대에서 조명을 비추는 스포트라이트라고 할 수 있다. 배우(프로그램)가 어디에 서야 할지, 어떤 대사를 말해야 하는지 지시하는 역할을 한다. 무대 설정이 깔끔하면 공연이 매끄럽게 진행되듯, launch.json으로 디버깅 환경을 잘 설정하면 디버깅이 훨씬 쉬워진다.

코드 분석 및 설명

아래는 우리가 분석할 예제 코드이다.

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug C++ Program",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/app",
      "args": ["arg1", "arg2"],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [
        {
          "name": "MY_ENV_VAR",
          "value": "value"
        }
      ],
      "externalConsole": false,
      "MIMode": "gdb",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        },
        {
          "description": "Set breakpoint at main",
          "text": "break main",
          "ignoreFailures": false
        }
      ]
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

이 코드를 이해하기 쉽게 주요 구성 요소를 나눠보자.

1. version: 버전 정보

version은 launch.json의 형식을 정의하는 버전이다.
현재 0.2.0이 최신이며 대부분의 경우 수정할 필요는 없다.

2. configurations: 디버깅 설정 배열

배열 안에 여러 디버깅 구성을 추가할 수 있다.
예를 들어, C++ 프로그램, Python 스크립트 등 다양한 언어별 디버깅 환경을 정의할 수 있다.

3. 개별 구성 요소 설명

(1) name
디버깅 구성을 식별하는 이름이다. VS Code 디버깅 UI에서 이 이름이 표시된다.

(2) type
디버깅 대상 언어를 나타낸다.
여기서는 cppdbg를 사용해 C++ 디버깅을 설정하고 있다.

(3) request
디버깅 요청 방식이다.

  • "launch": 프로그램을 실행하고 디버깅 시작
  • "attach": 실행 중인 프로세스에 연결

(4) program
실행할 프로그램의 경로이다.
여기서는 ${workspaceFolder}/app으로 지정되어 있어, 현재 작업 디렉토리에 있는 app 실행 파일을 디버깅한다.

(5) args
프로그램 실행 시 전달할 명령줄 인수이다.
예를 들어, arg1, arg2라는 값을 전달할 수 있다.

(6) stopAtEntry
프로그램의 엔트리 포인트(첫 번째 코드 실행 위치)에서 디버거를 멈출지 여부를 결정한다.
false로 설정되어 있으니 바로 실행된다.

(7) cwd
현재 작업 디렉토리를 설정한다.
디버깅 중 파일을 읽거나 쓸 때 기준 경로가 된다.

(8) environment
디버깅 환경에 추가할 환경 변수이다.
예제에서는 MY_ENV_VAR라는 변수에 value를 할당하게 된다.

(9) externalConsole
외부 콘솔 창을 사용할지 여부를 결정한다.
false로 설정하면 VS Code 내 터미널에서 실행된다.

(10) MIMode
디버거의 모드를 정의한다.
여기서는 gdb를 사용하고 있다. lldb, cppvsdbg 을 사용할 수도 있다.

(11) setupCommands
디버거 시작 전에 실행할 추가 명령이다.
예제에서는 두 가지 명령을 사용하고 있다.

  • GDB의 pretty-printing 활성화: 디버깅 데이터를 보기 좋게 출력한다.
  • main 함수에 브레이크포인트 설정: 프로그램 시작 시 멈추도록 지시한다.

실제 응용 사례 또는 확장 가능성

1. 다중 디버깅 환경 구성

동일한 프로젝트에서 Python, Node.js, C++ 등 여러 언어를 사용할 때 configurations에 각각의 디버깅 설정을 추가할 수 있다.

2. 유연한 환경 변수 사용

환경 변수를 다르게 설정해 로컬, 스테이징, 프로덕션 등 다양한 환경에서 프로그램을 테스트할 수 있다.

3. 복잡한 디버거 명령 설정

setupCommands를 활용하면 특정 함수에서만 중단하거나, 동적 메모리를 추적하는 등 세밀한 디버깅이 가능하다.

마무리

launch.json은 VS Code에서 디버깅 환경을 설정하는 데 유용한 도구이다.
이를 통해 디버깅 설정의 기초부터 응용 가능성까지 살펴봤다.

이제 응용을 통해 자신의 프로젝트에 맞는 디버깅 구성을 시도해보자. attach를 활용해 실행 중인 서버에 디버거를 붙이는 방법이나, 원격 디버깅 설정도 가능하지 않겠는가.

Top comments (0)