VSC에서 launch.json 파일로 디버깅을 해보자

Junkyu_Kang·2024년 12월 9일

Python은 debugpy를 사용하여 디버그를 사용할 수 있다!
솔직히 eclips debugger 보다 더 좋다..

해당 debug 환경은 lanch.json에서 설정하여 할 수 있따.

작성 예시를 먼저 보자

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Module: algorithm service",
            "type": "python",
            "request": "launch",
            "module": "algorithm.algorithm_service",
            "args": ["gumiipark"],
            "console": "integratedTerminal"
        }
    ]
}

위 내용을 보면 configurations 에서 설정을 할 수 있따. 위 내용은 프로젝트 일부이나, 내용을 보면 모두 유추하기 쉽다.
물론 args를 여러개 보낼수도, 내용을 설정할 수도 있다.

위 내용을 설정을 해야 modules에서 설정 내용을 실행시켜 확인할 수 있기도 하고.. 다른 파일들도 모듈단위로 지정해놓으면 debug 하기 쉽다.

주요 내용은 다음과 같다.

name:
디버깅 작업의 이름
여러 디버깅 구성을 구분하기 위해 설정

type:
디버깅 타입을 지정
Python의 경우 debugpy 또는 python으로 설정

request:
디버깅을 시작하는 방식
"launch": 새 프로세스를 시작하여 디버깅.
"attach": 이미 실행 중인 프로세스에 연결.

module:
디버그할 Python 모듈을 지정
python -m <모듈 이름> 명령과 동일
예를 들어, 위 설정은 python -m algorithm.algorithm_service를 실행

args:
디버깅 시 전달할 인수
sys.argv에 전달되는 값이며, 모듈 실행 시 필요한 추가 파라미터를 지정
예를 들어, "gumiipark"는 sys.argv[1]로 전달

launch.json의 파일 위치는 루트 디렉토리가 아니라 .vscode/ 하위에 넣어야한다!

1. 우선 debug를 하려면 라이브러리를 설치해야한다.

pip install debugpy

2. launch.json 파일을 작성한다.

3. Vscode에서 Run and Debug 메뉴에서 작업을 실행한다.


하다보니 내용이 많아 추가한 내용

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Module: algorithm service",
      "type": "python",
      "request": "launch",
      "module": "algorithm.algorithm_service",
      "args": ["gumiipark"],  // 모듈 실행 시 전달할 인수
      "console": "integratedTerminal", // 디버깅 콘솔을 VS Code 내부 터미널에서 실행
      "justMyCode": false, // 사용자 코드가 아닌 외부 라이브러리 디버깅 활성화
      "env": { // 환경 변수 설정
        "DEBUG": "1",
        "LOG_LEVEL": "debug",
        "API_URL": "https://example.com/api"
      },
      "envFile": "${workspaceFolder}/.env", // 외부 환경 변수 파일
      "cwd": "${workspaceFolder}/src", // 실행 경로 설정
      "stopOnEntry": false, // 디버깅 시작 시 처음에 멈추지 않음
      "pythonPath": "${workspaceFolder}/venv/bin/python", // 가상 환경의 Python 경로
      "showReturnValue": true, // 함수의 반환값을 디버깅 콘솔에 표시
      "logToFile": true // 디버깅 로그를 파일로 저장
    }
  ]
}

위 내용처럼 생각보다 내용이 많았다! 심지어

환경변수도 json 파일 내부에서 설정 가능하다!

설명은 다음과 같다!

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Module: algorithm service",
      "type": "python",
      "request": "launch",
      "module": "algorithm.algorithm_service",
      "args": ["gumiipark"],  // 모듈 실행 시 전달할 인수
      "console": "integratedTerminal", // 디버깅 콘솔을 VS Code 내부 터미널에서 실행
      "justMyCode": false, // 사용자 코드가 아닌 외부 라이브러리 디버깅 활성화
      "env": { // 환경 변수 설정
        "DEBUG": "1",
        "LOG_LEVEL": "debug",
        "API_URL": "https://example.com/api"
      },
      "envFile": "${workspaceFolder}/.env", // 외부 환경 변수 파일
      "cwd": "${workspaceFolder}/src", // 실행 경로 설정
      "stopOnEntry": false, // 디버깅 시작 시 처음에 멈추지 않음
      "pythonPath": "${workspaceFolder}/venv/bin/python", // 가상 환경의 Python 경로
      "showReturnValue": true, // 함수의 반환값을 디버깅 콘솔에 표시
      "logToFile": true // 디버깅 로그를 파일로 저장
    }
  ]
}

주요 필드 설명

name: 디버깅 구성을 구분하기 위한 이름.
type: 디버깅 타입 (python 또는 debugpy).
request: 디버깅 모드, launch는 새 프로세스 시작, attach는 기존 프로세스 연결.
module: 실행할 Python 모듈.
args: 모듈 실행 시 전달할 명령줄 인수.
console: 디버깅 콘솔 설정. integratedTerminal, externalTerminal, none.
env: 환경 변수를 직접 설정.
envFile: .env 파일을 지정하여 환경 변수를 로드.
cwd: 디버깅 실행 디렉토리.
pythonPath: 사용할 Python 실행 파일 경로.
justMyCode: 외부 라이브러리를 디버깅할지 여부 (false로 설정 시 가능).
stopOnEntry: 실행 직후 중단점을 설정하지 않아도 첫 줄에서 중단.
showReturnValue: 함수의 반환값을 콘솔에 표시.
logToFile: 디버깅 로그를 파일로 저장.

심지어 Node, Go, C++, java 등 다양한 환경에서 사용 가능하다!

1. Python

Type: python
Python 코드 실행 및 디버깅.
모듈 실행, 스크립트 실행, 기존 프로세스 연결 지원.

{
  "name": "Python: File",
  "type": "python",
  "request": "launch",
  "program": "${file}",
  "console": "integratedTerminal"
}

2. Node.js

Type: node
Node.js 애플리케이션 디버깅.
파일 실행, 프로세스 연결, 원격 디버깅 지원.

{
  "name": "Node.js: Launch Program",
  "type": "node",
  "request": "launch",
  "program": "${workspaceFolder}/app.js"
}

3. Java

Type: java
Java 프로젝트 디버깅.

Maven, Gradle, 단일 파일 디버깅 지원.

{
  "name": "Java: Launch Program",
  "type": "java",
  "request": "launch",
  "mainClass": "com.example.Main",
  "projectName": "my-java-project"
}

4. C++ (GDB/LLDB)

Type: cppdbg
C++ 애플리케이션 디버깅.
GCC, Clang, MSVC와 호환.

{
  "name": "C++: Launch Program",
  "type": "cppdbg",
  "request": "launch",
  "program": "${workspaceFolder}/bin/myprogram",
  "args": [],
  "stopAtEntry": false,
  "cwd": "${workspaceFolder}",
  "environment": [],
  "externalConsole": false,
  "MIMode": "gdb"
}

5. Go

Type: go
Go 언어 지원 디버깅 (Delve 사용).

{
  "name": "Go: Launch",
  "type": "go",
  "request": "launch",
  "program": "${workspaceFolder}"
}

6. Ruby

Type: ruby
Ruby 애플리케이션 디버깅.

{
  "name": "Ruby: Debug",
  "type": "ruby",
  "request": "launch",
  "program": "${workspaceFolder}/app.rb"
}

7. Docker

Type: docker
Docker 컨테이너 내에서 실행되는 애플리케이션 디버깅.

{
  "name": "Docker: Python - Django",
  "type": "docker",
  "request": "launch",
  "preLaunchTask": "docker-run: debug",
  "python": {
    "module": "django",
    "args": ["runserver", "--noreload"]
  }
}

8. PowerShell

Type: PowerShell
PowerShell 스크립트 디버깅.

{
  "name": "PowerShell: Script",
  "type": "PowerShell",
  "request": "launch",
  "script": "${file}",
  "args": []
}

9. Remote Debugging

원격 프로세스 디버깅을 위해 사용.
프로세스가 실행 중인 호스트와 포트를 지정.

Python 원격 디버깅

{
  "name": "Python: Remote Attach",
  "type": "python",
  "request": "attach",
  "connect": {
    "host": "127.0.0.1",
    "port": 5678
  },
  "pathMappings": [
    {
      "localRoot": "${workspaceFolder}",
      "remoteRoot": "/app"
    }
  ]
}

Node.js 원격 디버깅

{
  "name": "Node.js: Remote Attach",
  "type": "node",
  "request": "attach",
  "address": "127.0.0.1",
  "port": 9229,
  "remoteRoot": "/app",
  "localRoot": "${workspaceFolder}"
}

초보 파이썬 개발자에게.. debugging은 필수다...........


위 처럼 variables에서도 값을 확인할 수 있고


debug console에서도 확인할 수 있따!!

이제 print로 디버깅하지말자!!


BreakPoint 거는 건 잊지마시오,,

profile
강준규

0개의 댓글