이 출시되었습니다! 11월의 새로운 기능 및 수정 사항을 읽어보세요.

VS Code에서 Python 디버깅

Python 확장은 여러 유형의 Python 애플리케이션에 대해 Python 디버거 확장을 통해 디버깅을 지원합니다. 기본 디버깅에 대한 간단한 안내는 튜토리얼 - 디버거 구성 및 실행을 참조하십시오. 또한 Flask 튜토리얼도 참조하십시오. 두 튜토리얼 모두 중단점 설정 및 코드 단계를 통한 실행과 같은 핵심 기술을 보여줍니다.

변수 검사, 중단점 설정 및 언어에 종속되지 않은 기타 활동과 같은 일반적인 디버깅 기능은 VS Code 디버깅을 참조하십시오.

이 문서는 주로 Python별 디버깅 *구성*에 초점을 맞추며, 특정 앱 유형 및 원격 디버깅에 필요한 단계를 포함합니다.

Python 디버거 확장

Python 디버거 확장은 VS Code의 Python 확장과 함께 자동으로 설치됩니다. 스크립트, 웹 앱, 원격 프로세스 등 여러 유형의 Python 애플리케이션에 대해 debugpy를 사용하여 디버깅 기능을 제공합니다.

설치 여부를 확인하려면 **확장** 보기(⇧⌘X (Windows, Linux Ctrl+Shift+X))를 열고 @installed python debugger를 검색하십시오. 결과에 Python 디버거 확장이 나열되어야 합니다.

Python Debugger extension shown in installed extensions view in VS Code.

지원되는 Python 버전에 대한 정보는 확장 프로그램의 README 페이지를 참조하십시오.

구성 초기화

구성(configuration)은 디버깅 세션 중에 VS Code의 동작을 제어합니다. 구성은 작업 공간의 .vscode 폴더에 저장된 launch.json 파일에 정의됩니다.

참고: 디버깅 구성을 변경하려면 코드가 폴더에 저장되어야 합니다.

디버그 구성을 초기화하려면 먼저 사이드바에서 **실행** 보기를 선택하십시오.

Run icon

아직 구성이 정의되지 않았다면 **실행 및 디버그** 버튼과 구성(launch.json) 파일 생성 링크가 표시됩니다.

Debug toolbar settings command

Python 구성으로 launch.json 파일을 생성하려면 다음 단계를 따르십시오.

  1. (위 이미지에서 강조 표시된) **launch.json 파일 만들기** 링크를 선택하거나 **실행** > **구성 열기** 메뉴 명령을 사용하십시오.

  2. 디버거 옵션 목록에서 **Python 디버거**를 선택하십시오.

  3. 명령 팔레트에서 구성 메뉴가 열려 Python 프로젝트 파일에 사용할 디버그 구성 유형을 선택할 수 있습니다. 단일 Python 스크립트를 디버그하려면 나타나는 **디버그 구성 선택** 메뉴에서 **Python 파일**을 선택하십시오.

    List of Python debugger configuration options

    참고: 디버그 패널, F5 또는 구성이 없는 **실행 > 디버깅 시작**을 통해 디버깅 세션을 시작하면 디버그 구성 메뉴가 나타나지만 launch.json 파일은 생성되지 않습니다.

  4. Python 디버거 확장은 이전에 선택한 **Python 파일**에 기반한 사전 정의된 구성이 포함된 launch.json 파일을 생성하고 엽니다. 구성을 수정하거나(예: 인수를 추가) 사용자 지정 구성을 추가할 수도 있습니다.

    Configuration json

구성 속성의 세부 정보는 이 문서의 표준 구성 및 옵션 섹션에서 다룹니다. 다른 구성은 이 문서의 특정 앱 유형 디버깅 섹션에서도 설명합니다.

추가 구성

기본적으로 VS Code는 Python 디버거 확장 프로그램에서 제공하는 가장 일반적인 구성만 표시합니다. 목록에 표시된 **구성 추가** 명령과 launch.json 편집기를 사용하여 launch.json에 포함할 다른 구성을 선택할 수 있습니다. 이 명령을 사용하면 VS Code가 사용 가능한 모든 구성 목록을 표시합니다(반드시 **Python** 옵션을 선택하십시오).

Adding a new Python debugging configuration

**프로세스 ID로 연결**을 선택하면 다음과 같은 결과가 나옵니다. 구성 추가됨

이러한 모든 구성에 대한 자세한 내용은 특정 앱 유형 디버깅을 참조하십시오.

디버깅 중 상태 표시줄은 현재 구성과 현재 디버깅 인터프리터를 표시합니다. 구성을 선택하면 목록이 표시되고 여기서 다른 구성을 선택할 수 있습니다.

Debugging Status Bar

기본적으로 디버거는 VS Code의 다른 Python 확장 기능과 마찬가지로 작업 공간에 선택된 것과 동일한 인터프리터를 사용합니다. 디버깅을 위해 다른 인터프리터를 사용하려면 해당 디버거 구성의 launch.json에서 python 값을 설정하십시오. 또는 상태 표시줄의 Python 인터프리터 표시줄을 사용하여 다른 인터프리터를 선택하십시오.

기본 디버깅

Python 스크립트 디버깅에만 관심이 있다면, 편집기에서 실행 버튼 옆의 아래쪽 화살표를 선택하고 **Python 디버거: Python 파일 디버그**를 선택하는 것이 가장 간단합니다.

Debug button on the top-right of the editor

Flask, Django 또는 FastAPI를 사용하여 웹 애플리케이션을 디버깅하려는 경우 Python 디버거 확장은 **실행 및 디버그** 보기의 **모든 자동 디버그 구성 표시** 옵션 아래에서 프로젝트 구조에 따라 동적으로 생성된 디버그 구성을 제공합니다.

Show all automatic debug configurations option on the run view

하지만 다른 유형의 애플리케이션을 디버깅하려는 경우 **실행** 보기에서 **실행 및 디버그** 버튼을 클릭하여 디버거를 시작할 수 있습니다.

Run the debugger

구성 설정이 없을 때는 디버깅 옵션 목록이 표시됩니다. 여기서 적절한 옵션을 선택하여 코드를 빠르게 디버깅할 수 있습니다.

두 가지 일반적인 옵션은 **Python 파일** 구성을 사용하여 현재 열려 있는 Python 파일을 실행하거나 **프로세스 ID로 연결** 구성을 사용하여 이미 실행 중인 프로세스에 디버거를 연결하는 것입니다.

디버깅 구성을 생성하고 사용하는 방법에 대한 정보는 구성 초기화추가 구성 섹션을 참조하십시오. 구성이 추가되면 드롭다운 목록에서 선택하고 **디버깅 시작** 버튼(F5)을 사용하여 시작할 수 있습니다.

Start debugging button in the Run and Debug view

명령줄 디버깅

debugpy가 Python 환경에 설치되어 있다면 명령줄에서도 디버거를 실행할 수 있습니다.

debugpy 설치

Python 환경에 python -m pip install --upgrade debugpy를 사용하여 debugpy를 설치할 수 있습니다.

: 가상 환경 사용은 필수는 아니지만 권장되는 모범 사례입니다. VS Code에서 명령 팔레트(⇧⌘P (Windows, Linux Ctrl+Shift+P))를 열고 **Python: 가상 환경 만들기** 명령()을 실행하여 VS Code에서 가상 환경을 만들 수 있습니다.

명령줄 구문

디버거 명령줄 구문은 다음과 같습니다.

python -m debugpy
    --listen | --connect
    [<host>:]<port>
    [--wait-for-client]
    [--configure-<name> <value>]...
    [--log-to <path>] [--log-to-stderr]
    <filename> | -m <module> | -c <code> | --pid <pid>
    [<arg>]...

명령줄에서 특정 포트(5678)와 스크립트를 사용하여 디버거를 시작할 수 있습니다. 이 예제는 스크립트가 오래 실행된다고 가정하고 --wait-for-client 플래그를 생략하므로 스크립트가 클라이언트 연결을 기다리지 않습니다.

python -m debugpy --listen 5678 ./myscript.py

그런 다음 VS Code Python 디버거 확장 프로그램에서 연결하기 위해 다음 구성을 사용합니다.

{
  "name": "Python Debugger: Attach",
  "type": "debugpy",
  "request": "attach",
  "connect": {
    "host": "localhost",
    "port": 5678
  }
}

참고: listen의 경우 호스트 지정은 선택 사항이며 기본값은 127.0.0.1입니다.

원격 코드 또는 도커 컨테이너에서 실행 중인 코드를 디버그하려면 원격 머신 또는 컨테이너에서 이전 CLI 명령을 수정하여 호스트를 지정해야 합니다.

python -m debugpy --listen 0.0.0.0:5678 ./myscript.py

관련 구성 파일은 다음과 같습니다.

{
  "name": "Attach",
  "type": "debugpy",
  "request": "attach",
  "connect": {
    "host": "remote-machine-name", // replace this with remote machine name
    "port": 5678
  }
}

참고: 127.0.0.1 또는 localhost 이외의 호스트 값을 지정하면 모든 머신에서 액세스할 수 있는 포트를 열게 되므로 보안 위험이 있습니다. 원격 디버깅 시 SSH 터널 사용과 같은 적절한 보안 예방 조치를 취해야 합니다.

명령줄 옵션

플래그 옵션 설명
--listen 또는 --connect [<host>:]<port> 필수. 디버그 어댑터 서버가 들어오는 연결을 기다리거나(--listen) 들어오는 연결을 기다리는 클라이언트와 연결하기 위해(--connect) 사용할 호스트 주소와 포트를 지정합니다. 이는 VS Code 디버그 구성에서 사용되는 것과 동일한 주소입니다. 기본 호스트 주소는 localhost (127.0.0.1)입니다.
--wait-for-client 없음 선택 사항. 디버그 서버에서 연결이 이루어질 때까지 코드가 실행되지 않도록 지정합니다. 이 설정은 코드의 첫 줄부터 디버깅할 수 있도록 합니다.
--log-to <path> 선택 사항. 로그를 저장할 기존 디렉터리에 대한 경로를 지정합니다.
--log-to-stderr 없음 선택 사항. debugpy가 로그를 stderr로 직접 쓰도록 활성화합니다.
--pid <pid> 선택 사항. 이미 실행 중인 프로세스에 디버그 서버를 삽입하도록 지정합니다.
--configure-<name> <value> 선택 사항. 클라이언트가 연결되기 전에 디버그 서버에서 알아야 하는 디버그 속성을 설정합니다. 이러한 속성은 launch 구성에서 직접 사용할 수 있지만 attach 구성의 경우 이러한 방식으로 설정해야 합니다. 예를 들어, 연결하는 프로세스에서 생성된 하위 프로세스에 디버그 서버가 자동으로 삽입되는 것을 원하지 않으면 --configure-subProcess false를 사용하십시오.

참고: [<arg>]를 사용하여 시작되는 앱으로 명령줄 인수를 전달할 수 있습니다.

네트워크 연결을 통한 디버깅 연결

로컬 스크립트 디버깅

다른 프로세스에 의해 로컬로 호출되는 Python 스크립트를 디버깅해야 하는 경우가 있을 수 있습니다. 예를 들어 특정 처리 작업을 위해 다른 Python 스크립트를 실행하는 웹 서버를 디버깅하고 있을 수 있습니다. 이러한 경우 스크립트가 시작된 후 VS Code 디버거를 스크립트에 연결해야 합니다.

  1. VS Code를 실행하고 스크립트를 포함하는 폴더 또는 작업 공간을 연 다음, 해당 작업 공간에 launch.json이 없는 경우 생성합니다.

  2. 스크립트 코드에 다음을 추가하고 파일을 저장합니다.

    import debugpy
    
    # 5678 is the default attach port in the VS Code debug configurations. Unless a host and port are specified, host defaults to 127.0.0.1
    debugpy.listen(5678)
    print("Waiting for debugger attach")
    debugpy.wait_for_client()
    debugpy.breakpoint()
    print('break on this line')
    
  3. **터미널: 새 터미널 만들기**를 사용하여 터미널을 열면 스크립트의 선택한 환경이 활성화됩니다.

  4. 터미널에서 debugpy 패키지를 설치하십시오.

  5. 터미널에서 스크립트와 함께 Python을 시작합니다. 예를 들어 python3 myscript.py를 실행하면 코드에 포함된 "디버거 연결 대기 중" 메시지가 표시되고 스크립트는 debugpy.wait_for_client() 호출에서 일시 중지됩니다.

  6. **실행 및 디버그** 보기(⇧⌘D (Windows, Linux Ctrl+Shift+D))로 전환하고, 디버거 드롭다운 목록에서 적절한 구성을 선택하고, 디버거를 시작하십시오.

  7. 디버거는 debugpy.breakpoint() 호출에서 중지해야 하며, 여기서부터 디버거를 정상적으로 사용할 수 있습니다. UI를 사용하여 스크립트 코드에 다른 중단점을 설정할 수도 있습니다.

SSH를 사용한 원격 스크립트 디버깅

원격 디버깅을 사용하면 원격 컴퓨터에서 실행되는 프로그램을 VS Code에서 로컬로 단계별로 실행할 수 있습니다. 원격 컴퓨터에 VS Code를 설치할 필요는 없습니다. 보안을 강화하려면 디버깅 시 원격 컴퓨터로의 SSH와 같은 보안 연결을 사용해야 할 수 있습니다.

참고: Windows 컴퓨터에서는 ssh 명령을 사용하려면 Windows 10 OpenSSH를 설치해야 할 수 있습니다.

다음 단계는 SSH 터널 설정을 위한 일반적인 프로세스를 설명합니다. SSH 터널을 사용하면 원격 컴퓨터에서 직접 작업하는 것처럼 로컬 머신에서 작업할 수 있으며, 포트가 공개 액세스용으로 열려 있는 것보다 더 안전합니다.

원격 컴퓨터에서

  1. sshd_config 구성 파일(Linux에서는 /etc/ssh/, Windows에서는 %programfiles(x86)%/openssh/etc 아래에 있음)을 열고 다음 설정을 추가하거나 수정하여 포트 전달을 활성화합니다.

    AllowTcpForwarding yes
    

    참고: AllowTcpForwarding의 기본값은 'yes'이므로 변경할 필요가 없을 수 있습니다.

  2. AllowTcpForwarding을 추가하거나 수정해야 하는 경우 SSH 서버를 다시 시작합니다. Linux/macOS에서는 sudo service ssh restart를 실행합니다. Windows에서는 services.msc를 실행하고 서비스 목록에서 OpenSSH 또는 sshd를 선택한 다음 **다시 시작**을 선택합니다.

로컬 컴퓨터에서

  1. destinationport에 대한 선택한 포트와 user@remoteaddress에 적절한 사용자 이름 및 원격 컴퓨터의 IP 주소를 사용하여 ssh -2 -L sourceport:localhost:destinationport -i identityfile user@remoteaddress를 실행하여 SSH 터널을 생성합니다. 예를 들어 IP 주소 1.2.3.4의 포트 5678을 사용하려면 명령은 ssh -2 -L 5678:localhost:5678 -i identityfile user@1.2.3.4가 됩니다. -i 플래그를 사용하여 ID 파일 경로를 지정할 수 있습니다.

  2. SSH 세션에서 프롬프트를 볼 수 있는지 확인합니다.

  3. VS Code 작업 공간에서 launch.json 파일에 원격 디버깅 구성을 만들고, 포트는 ssh 명령에 사용된 포트와 일치하도록 설정하고, 호스트는 localhost로 설정합니다. SSH 터널을 설정했기 때문에 여기서는 localhost를 사용합니다.

    {
      "name": "Python Debugger: Attach",
      "type": "debugpy",
      "request": "attach",
      "port": 5678,
      "host": "localhost",
      "pathMappings": [
        {
          "localRoot": "${workspaceFolder}", // Maps C:\Users\user1\project1
          "remoteRoot": "." // To current working directory ~/project1
        }
      ]
    }
    

디버깅 시작

이제 원격 컴퓨터로 SSH 터널이 설정되었으므로 디버깅을 시작할 수 있습니다.

  1. 두 컴퓨터 모두: 동일한 소스 코드를 사용할 수 있는지 확인합니다.

  2. 두 컴퓨터 모두: debugpy를 설치합니다.

  3. 원격 컴퓨터: 원격 프로세스에 연결하는 방법을 지정하는 두 가지 방법이 있습니다.

    1. 소스 코드에 다음 줄을 추가하고 address를 원격 컴퓨터의 IP 주소 및 포트 번호로 바꿉니다(IP 주소 1.2.3.4는 설명용으로만 표시됨).

      import debugpy
      
      # Allow other computers to attach to debugpy at this IP address and port.
      debugpy.listen(('1.2.3.4', 5678))
      
      # Pause the program until a remote debugger is attached
      debugpy.wait_for_client()
      

      listen에 사용된 IP 주소는 원격 컴퓨터의 개인 IP 주소여야 합니다. 그런 다음 프로그램을 정상적으로 시작하여 디버거가 연결될 때까지 일시 중지시킬 수 있습니다.

    2. debugpy를 통해 원격 프로세스를 시작합니다. 예를 들어

      python3 -m debugpy --listen 1.2.3.4:5678 --wait-for-client -m myproject
      

      이것은 python3를 사용하여 원격 컴퓨터의 개인 IP 주소인 1.2.3.4와 포트 5678에서 수신 대기하는 패키지 myproject를 시작합니다(-m 대신 파일 경로를 지정하여 원격 Python 프로세스를 시작할 수도 있습니다. 예: ./hello.py).

  4. 로컬 컴퓨터: 위에서 설명한 대로 원격 컴퓨터의 소스 코드를 수정한 경우에만, 소스 코드에 원격 컴퓨터에 추가된 것과 동일한 코드의 주석 처리된 복사본을 추가합니다. 이 줄을 추가하면 두 컴퓨터의 소스 코드가 줄별로 일치하도록 보장됩니다.

    #import debugpy
    
    # Allow other computers to attach to debugpy at this IP address and port.
    #debugpy.listen(('1.2.3.4', 5678))
    
    # Pause the program until a remote debugger is attached
    #debugpy.wait_for_client()
    
  5. 로컬 컴퓨터: VS Code에서 **실행 및 디버그** 보기(⇧⌘D (Windows, Linux Ctrl+Shift+D))로 전환하고 **Python 디버거: 연결** 구성을 선택합니다.

  6. 로컬 컴퓨터: 디버깅을 시작하려는 코드 위치에 중단점을 설정합니다.

  7. 로컬 컴퓨터: 수정된 **Python 디버거: 연결** 구성과 시작 디버깅 버튼을 사용하여 VS Code 디버거를 시작합니다. VS Code는 로컬로 설정한 중단점에서 중지되어 코드를 단계별로 실행하고 변수를 검사하며 다른 모든 디버깅 작업을 수행할 수 있습니다. **디버그 콘솔**에 입력한 식은 원격 컴퓨터에서도 실행됩니다.

    print 문과 같이 stdout으로 텍스트를 출력하는 것은 두 컴퓨터 모두에 나타납니다. 그러나 matplotlib과 같은 패키지의 그래픽 플롯과 같은 다른 출력은 원격 컴퓨터에서만 나타납니다.

  8. 원격 디버깅 중 디버깅 도구 모음은 다음과 같이 표시됩니다.

    Debugging toolbar during remote debugging

    이 도구 모음에서 연결 끊기 버튼(⇧F5 (Windows, Linux Shift+F5))은 디버거를 중지하고 원격 프로그램이 완료될 때까지 실행되도록 합니다. 다시 시작 버튼(⇧⌘F5 (Windows, Linux Ctrl+Shift+F5))은 로컬 컴퓨터에서 디버거를 다시 시작하지만 원격 프로그램은 다시 시작하지 **않습니다**. 원격 프로그램을 이미 다시 시작하고 디버거를 다시 연결해야 할 때만 다시 시작 버튼을 사용하십시오.

구성 옵션 설정

launch.json을 처음 만들 때 편집기에서 활성 파일을 통합 터미널(VS Code 내부) 또는 외부 터미널(VS Code 외부)에서 실행하는 두 가지 표준 구성이 있습니다.

{
  "configurations": [
    {
      "name": "Python Debugger: Current File (Integrated Terminal)",
      "type": "debugpy",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal"
    },
    {
      "name": "Python Debugger: Current File (External Terminal)",
      "type": "debugpy",
      "request": "launch",
      "program": "${file}",
      "console": "externalTerminal"
    }
  ]
}

특정 설정은 다음 섹션에 설명되어 있습니다. 또한 표준 구성에 포함되지 않은 args와 같은 다른 설정을 추가할 수 있습니다.

: 프로젝트에서 특정 시작 파일을 실행하는 구성을 만드는 것이 유용한 경우가 많습니다. 예를 들어 디버거를 시작할 때 항상 --port 1593 인수로 startup.py를 실행하려면 다음과 같이 구성 항목을 만듭니다.

 {
     "name": "Python Debugger: startup.py",
     "type": "debugpy",
     "request": "launch",
     "program": "${workspaceFolder}/startup.py",
     "args" : ["--port", "1593"]
 },

이름

VS Code 드롭다운 목록에 표시되는 디버그 구성의 이름을 제공합니다.

타입

사용할 디버거의 유형을 식별합니다. Python 코드 디버깅의 경우 debugpy로 유지하십시오.

request

디버깅을 시작할 모드를 지정합니다.

  • launch: program에 지정된 파일에서 디버거를 시작합니다.
  • attach: 이미 실행 중인 프로세스에 디버거를 연결합니다. 예는 원격 디버깅을 참조하십시오.

program

Python 프로그램의 진입점 모듈(시작 파일)의 전체 경로를 제공합니다. 기본 구성에서 자주 사용되는 값인 ${file}은 편집기에서 현재 활성 파일을 사용합니다. 특정 시작 파일을 지정하면 어떤 파일이 열려 있든 항상 동일한 진입점으로 프로그램을 시작할 수 있습니다. 예를 들어

"program": "/Users/Me/Projects/MyProject/src/event_handlers/__init__.py",

작업 공간 루트에서 상대 경로에 의존할 수도 있습니다. 예를 들어, 루트가 /Users/Me/Projects/MyProject이면 다음 예제를 사용할 수 있습니다.

"program": "${workspaceFolder}/src/event_handlers/__init__.py",

module

명령줄에서 실행할 때 -m 인수와 유사하게 디버깅할 모듈의 이름을 지정하는 기능을 제공합니다. 자세한 내용은 Python.org를 참조하십시오.

python

디버깅에 사용할 Python 인터프리터를 가리키는 전체 경로를 제공합니다.

지정하지 않으면 이 설정은 작업 공간에 대해 선택된 인터프리터로 기본 설정되며, 이는 ${command:python.interpreterPath} 값을 사용하는 것과 같습니다. 다른 인터프리터를 사용하려면 디버그 구성의 python 속성에서 해당 경로를 대신 지정하십시오.

또는 각 플랫폼에 정의된 사용자 지정 환경 변수를 사용하여 Python 인터프리터의 전체 경로를 포함하도록 하여 다른 폴더 경로가 필요하지 않도록 할 수 있습니다.

Python 인터프리터에 인수를 전달해야 하는 경우 pythonArgs 속성을 사용할 수 있습니다.

pythonArgs

"pythonArgs": ["<arg 1>", "<arg 2>",...] 구문을 사용하여 Python 인터프리터에 전달할 인수를 지정합니다.

args

Python 프로그램에 전달할 인수를 지정합니다. 공백으로 구분된 인수로 된 문자열의 각 요소는 따옴표로 묶어야 합니다. 예:

"args": ["--quiet", "--norepeat", "--port", "1593"],

디버그 실행마다 다른 인수를 제공하려면 args"${command:pickArgs}"로 설정할 수 있습니다. 이렇게 하면 디버그 세션을 시작할 때마다 인수를 입력하라는 메시지가 표시됩니다.

참고: "${command:pickArgs}"["${command:pickArgs}"]는 구문 분석 방식에 차이가 있으며, 특히 []의 사용에 유의해야 합니다. 배열로, 모든 인수가 하나의 문자열로 전달되며, 괄호 없이 각 인수는 자체 문자열로 전달됩니다.

stopOnEntry

true로 설정하면 디버깅 중인 프로그램의 첫 번째 줄에서 디버거가 중단됩니다. 생략하거나(기본값) false로 설정하면 디버거는 첫 번째 중단점까지 프로그램을 실행합니다.

console

redirectOutput의 기본값이 수정되지 않는 한 프로그램 출력이 표시되는 방법을 지정합니다.

출력이 표시되는 위치
"internalConsole" VS Code 디버그 콘솔. redirectOutput이 False로 설정되어 있으면 출력이 표시되지 않습니다.
"integratedTerminal" (기본값) VS Code 통합 터미널. redirectOutput이 True로 설정된 경우 디버그 콘솔에도 출력이 표시됩니다.
"externalTerminal" 별도 콘솔 창. redirectOutput이 True로 설정된 경우 디버그 콘솔에도 출력이 표시됩니다.

purpose

purpose 옵션을 사용하여 **실행** 버튼을 구성하는 방법은 여러 가지가 있습니다. 이 옵션을 debug-test로 설정하면 VS Code에서 테스트를 디버깅할 때 구성이 사용됨을 나타냅니다. 그러나 이 옵션을 debug-in-terminal로 설정하면 편집기 오른쪽 상단의 **Python 파일 실행** 버튼에 액세스할 때만(버튼에서 제공하는 **Python 파일 실행** 또는 **Python 파일 디버그** 옵션이 사용되는지 여부에 관계없이) 구성이 사용됨을 나타냅니다. 참고: purpose 옵션은 F5 또는 **실행 > 디버깅 시작**을 통해 디버거를 시작하는 데 사용할 수 없습니다.

autoReload

디버거 실행이 중단점에 도달한 후 코드 변경 시 디버거를 자동으로 다시 로드할 수 있습니다. 이 기능을 활성화하려면 다음 코드와 같이 {"enable": true}를 설정하십시오.

{
  "name": "Python Debugger: Current File",
  "type": "debugpy",
  "request": "launch",
  "program": "${file}",
  "console": "integratedTerminal",
  "autoReload": {
    "enable": true
  }
}

참고: 디버거가 다시 로드될 때 가져오기(import) 시 실행되는 코드가 다시 실행될 수 있습니다. 이 상황을 피하려면 모듈의 가져오기, 상수 및 정의만 사용하고 모든 코드를 함수로 배치해 보십시오. 또는 if __name__=="__main__" 검사를 사용할 수도 있습니다.

subProcess

하위 프로세스 디버깅 활성화 여부를 지정합니다. 기본값은 false이며, 활성화하려면 true로 설정합니다. 자세한 내용은 다중 대상 디버깅을 참조하십시오.

cwd

디버거의 현재 작업 디렉터리를 지정합니다. 이는 코드에서 사용되는 상대 경로의 기본 폴더입니다. 생략하면 ${workspaceFolder}(VS Code에서 열린 폴더)로 기본 설정됩니다.

예를 들어, ${workspaceFolder}app.py를 포함하는 py_code 폴더와 salaries.csv를 포함하는 data 폴더가 있다고 가정해 봅시다. py_code/app.py에서 디버거를 시작하면 데이터 파일에 대한 상대 경로는 cwd 값에 따라 달라집니다.

cwd 데이터 파일에 대한 상대 경로
생략 또는 ${workspaceFolder} data/salaries.csv
${workspaceFolder}/py_code ../data/salaries.csv
${workspaceFolder}/data salaries.csv

redirectOutput

true로 설정하면(internalConsole의 기본값), 디버거는 프로그램의 모든 출력을 VS Code 디버그 출력 창으로 인쇄합니다. false로 설정하면(integratedTerminal 및 externalTerminal의 기본값), 프로그램 출력은 디버거 출력 창에 표시되지 않습니다.

이 옵션은 일반적으로 "console": "integratedTerminal" 또는 "console": "externalTerminal"을 사용할 때 비활성화됩니다. 왜냐하면 디버그 콘솔에 출력을 복제할 필요가 없기 때문입니다.

justMyCode

생략하거나 true(기본값)로 설정하면 사용자 작성 코드만 디버깅합니다. false로 설정하면 표준 라이브러리 함수 디버깅도 활성화됩니다.

django

true로 설정하면 Django 웹 프레임워크에 특정한 디버깅 기능이 활성화됩니다.

sudo

true로 설정하고 "console": "externalTerminal"과 함께 사용하면 관리자 권한이 필요한 앱의 디버깅을 허용합니다. 외부 콘솔을 사용하면 암호를 캡처할 수 있습니다.

pyramid

true로 설정하면 Pyramid 앱이 필요한 pserve 명령으로 시작되도록 합니다.

env

시스템 환경 변수 외에 디버거 프로세스에 대한 선택적 환경 변수를 설정합니다. 디버거는 항상 시스템 환경 변수를 상속합니다. 이러한 변수에 대한 값은 문자열로 입력해야 합니다.

envFile

환경 변수 정의 파일에 대한 선택적 경로입니다. Python 환경 구성 - 환경 변수 정의 파일을 참조하십시오.

gevent

true로 설정하면 gevent monkey-patch된 코드의 디버깅을 활성화합니다.

jinja

true로 설정하면 Jinja 템플릿 프레임워크에 특정한 디버깅 기능이 활성화됩니다.

중단점 및 로그포인트

Python 디버거 확장은 코드 디버깅을 위해 중단점로그포인트를 지원합니다. 기본 디버깅 및 중단점 사용에 대한 간단한 안내는 튜토리얼 - 디버거 구성 및 실행을 참조하십시오.

조건부 중단점

중단점은 식, 히트 수 또는 둘의 조합에 따라 트리거되도록 설정할 수도 있습니다. Python 디버거 확장은 정수 외에 ==, >, >=, <, <=, % 연산자 앞에 정수가 붙은 히트 수를 지원합니다. 예를 들어, >5의 히트 수를 설정하여 5번 발생한 후 트리거되도록 중단점을 설정할 수 있습니다. 자세한 내용은 VS Code 디버깅 기본 문서의 조건부 중단점을 참조하십시오.

코드에서 중단점 호출

Python 코드에서 디버깅 세션 중에 디버거를 일시 중지하려는 지점에서 debugpy.breakpoint()를 호출할 수 있습니다.

중단점 유효성 검사

Python 디버거 확장은 pass 문이나 여러 줄 문장의 중간과 같이 실행할 수 없는 줄에 설정된 중단점을 자동으로 감지합니다. 이러한 경우 디버거를 실행하면 코드가 해당 지점에서 중지되도록 중단점을 가장 가까운 유효한 줄로 이동합니다.

특정 앱 유형 디버깅

구성 드롭다운은 일반 앱 유형에 대한 다양한 옵션을 제공합니다.

구성 설명
연결 이전 섹션의 원격 디버깅을 참조하십시오.
Django "program": "${workspaceFolder}/manage.py", "args": ["runserver"]를 지정합니다. 또한 Django HTML 템플릿 디버깅을 활성화하기 위해 "django": true를 추가합니다.
Flask 아래의 Flask 디버깅을 참조하십시오.
Gevent 표준 통합 터미널 구성에 "gevent": true를 추가합니다.
Pyramid program을 제거하고, "args": ["${workspaceFolder}/development.ini"]를 추가하며, 템플릿 디버깅을 활성화하기 위해 "jinja": true를 추가하고, 필요한 pserve 명령으로 프로그램이 시작되도록 "pyramid": true를 추가합니다.

Google App Engine 및 원격 디버깅에는 특정 단계도 필요합니다. 테스트 디버깅에 대한 자세한 내용은 테스트를 참조하십시오.

관리자 권한이 필요한 앱을 디버깅하려면 "console": "externalTerminal""sudo": "True"를 사용합니다.

Flask 디버깅

{
    "name": "Python Debugger: Flask",
    "type": "debugpy",
    "request": "launch",
    "module": "flask",
    "env": {
        "FLASK_APP": "app.py"
    },
    "args": [
        "run",
        "--no-debugger"
    ],
    "jinja": true
},

이 구성은 "env": {"FLASK_APP": "app.py"}"args": ["run", "--no-debugger"]를 지정합니다. program 대신 "module": "flask" 속성이 사용됩니다. (env 속성에서 "FLASK_APP": "${workspaceFolder}/app.py"가 보일 수 있는데, 이 경우 구성에서 파일 이름만 참조하도록 수정하십시오. 그렇지 않으면 "Cannot import module C" 오류가 발생할 수 있으며 여기서 C는 드라이브 문자입니다.)

"jinja": true 설정은 Flask의 기본 Jinja 템플릿 엔진에 대한 디버깅도 활성화합니다.

Flask의 개발 서버를 개발 모드로 실행하려면 다음 구성을 사용하세요.

{
    "name": "Python Debugger: Flask (development mode)",
    "type": "debugpy",
    "request": "launch",
    "module": "flask",
    "env": {
        "FLASK_APP": "app.py",
        "FLASK_ENV": "development"
    },
    "args": [
        "run"
    ],
    "jinja": true
},

문제 해결

디버거가 작동하지 않는 데에는 여러 가지 이유가 있습니다. 때로는 디버그 콘솔에서 특정 원인을 알 수 있지만, 주요 이유는 다음과 같습니다.

  • 확장 보기(⇧⌘X (Windows, Linux Ctrl+Shift+X))를 열고 @installed python debugger를 검색하여 VS Code에 **Python Debugger 확장**이 설치 및 활성화되어 있는지 확인하세요.

  • python 실행 파일 경로가 잘못되었습니다. Python: Select Interpreter 명령을 실행하고 현재 값을 확인하여 선택한 인터프리터의 경로를 확인하세요.

    Troubleshooting wrong Python interpreter when debugging

  • launch.json 파일에 "type"이 더 이상 사용되지 않는 값인 "python"으로 설정되어 있습니다. Python Debugger 확장을 사용하려면 "python" 대신 "debugpy"로 바꾸세요.

  • Watch 창에 잘못된 식이 있습니다. Watch 창에서 모든 식을 지우고 디버거를 다시 시작하세요.

  • Python threading API 대신 Win32 CreateThread 함수와 같은 네이티브 스레드 API를 사용하는 멀티스레드 앱으로 작업하는 경우, 디버그하려는 파일의 맨 위에 다음 소스 코드를 포함해야 합니다.

    import debugpy
    debugpy.debug_this_thread()
    
  • Linux 시스템으로 작업하는 경우, 실행 중인 프로세스에 디버거를 적용하려고 할 때 "timed out" 오류 메시지가 표시될 수 있습니다. 이를 방지하려면 다음 명령을 임시로 실행할 수 있습니다.

    echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
    

다음 단계

  • Python 환경 - 편집 및 디버깅에 사용되는 Python 인터프리터를 제어합니다.
  • 테스트 - 테스트 환경을 구성하고 테스트를 검색, 실행 및 디버그합니다.
  • 설정 참조 - VS Code의 Python 관련 설정 전체 범위를 살펴봅니다.
  • 일반 디버깅 - VS Code의 디버깅 기능에 대해 알아보세요.
© . This site is unofficial and not affiliated with Microsoft.