Visual Studio Code의 Python 디버그 구성
Python 확장은 다양한 유형의 Python 애플리케이션 디버깅을 지원합니다. 기본 디버깅에 대한 짧은 연습은 다음을 참조하세요. 자습서 - 디버거 구성 및 실행 . 또한 참조 플라스크 튜토리얼 . 두 자습서 모두 중단점 설정 및 코드 단계별 실행과 같은 핵심 기술을 보여줍니다.
일반적인 디버깅 기능의 경우 변수 검사, 중단점 설정 및 언어에 의존하지 않는 기타 활동, 검토 VS 코드 디버깅 .
이 기사는 주로 Python 관련 디버깅, Python과 관련된 고려 사항만 다룹니다. 구성 , 특정 앱 유형 및 원격 디버깅에 필요한 단계를 포함합니다.
구성 초기화
구성은 디버깅 세션 동안 VS Code의 동작을 구동합니다. 구성은 |_+_| |__+_|에 저장된 파일 작업 공간의 폴더입니다.
메모 디버깅 구성을 변경하려면 코드를 폴더에 저장해야 합니다.
디버그 구성을 초기화하려면 먼저 사이드바에서 디버그 보기를 선택합니다.
아직 구성을 정의하지 않은 경우 드롭다운 목록에 구성 없음이 표시되고 설정 아이콘에 점이 표시됩니다.
|_+_|를 생성하려면 Python 구성으로 파일을 생성하려면 다음 단계를 수행하십시오.
-
설정 버튼(위 이미지에서 동그라미 친 부분)을 선택하거나 디버그 > 구성 열기 메뉴 명령.
-
명령 팔레트에서 구성 메뉴가 열리고 열려 있는 파일에 대해 원하는 디버그 구성 유형을 선택할 수 있습니다. 현재로서는 디버그 구성 선택 메뉴가 나타나면 선택 파이썬 파일 .
메모 디버그 패널을 통해 디버깅 세션 시작, F5 또는 디버그 > 디버깅 시작 , 구성이 없으면 디버그 구성 메뉴도 표시됩니다.
- 그런 다음 Python 확장은 |_+_| 이 경우 이전에 선택한 항목을 기반으로 미리 정의된 구성이 포함된 파일 파이썬 파일 . 구성을 수정하고(예: 인수를 추가하기 위해) 사용자 지정 구성을 추가할 수도 있습니다.
구성 속성에 대한 자세한 내용은 이 문서의 뒷부분에 나와 있습니다. 표준 구성 및 옵션 . 추가 구성은 이 문서의 아래에 설명되어 있습니다. 특정 앱 유형 디버깅 .
추가 구성
기본적으로 VS Code는 Python 확장에서 제공하는 가장 일반적인 구성만 표시합니다. |_+_|에 포함할 다른 구성을 선택할 수 있습니다. 를 사용하여 구성 추가 목록 및 |_+_|에 표시된 명령 편집자. 명령을 사용할 때 VS Code는 사용 가능한 모든 구성 목록을 표시합니다(모든 Python 옵션을 보려면 아래로 스크롤해야 함).
선택 Node.js: Gulp 작업 다음과 같은 결과가 나타납니다.
보다 특정 앱 유형 디버깅 이러한 모든 구성에 대한 자세한 내용은
디버깅하는 동안 상태 표시줄의 왼쪽 하단에 현재 구성이 표시됩니다. 오른쪽에는 현재 디버깅 인터프리터가 있습니다. 구성을 선택하면 다른 구성을 선택할 수 있는 목록이 나타납니다.
기본적으로 디버거는 동일한 |_+_| VS Code의 다른 기능과 마찬가지로 작업 공간 설정. 특히 디버깅을 위해 다른 인터프리터를 사용하려면 |_+_|에 대한 값을 설정하십시오. |_+_|에서 다음 섹션에 설명된 대로 해당 디버거 구성에 대해 또는 상태 표시줄에서 명명된 인터프리터를 선택하여 |_+_|를 업데이트하는 다른 인터프리터를 선택합니다.
구성 옵션 설정
|_+_|를 처음 만들 때 통합 터미널(VS Code 내부) 또는 외부 터미널(VS Code 외부)의 편집기에서 활성 파일을 실행하는 두 가지 표준 구성이 있습니다.
launch.json
특정 설정은 다음 섹션에서 설명합니다. 표준 구성에 포함되지 않은 다른 설정(예: |_+_|)을 추가할 수도 있습니다.
팁 : 프로젝트에서 특정 시작 파일을 실행하는 구성을 만드는 것이 종종 도움이 됩니다. 예를 들어, |_+_|를 항상 실행하려면 인수 |_+_| 디버거를 시작할 때 다음과 같이 구성 항목을 만듭니다.
.vscode
launch.json
VS Code 드롭다운 목록에 나타나는 디버그 구성의 이름을 제공합니다.
launch.json
사용할 디버거 유형을 식별합니다. 이 설정을 |_+_|로 둡니다. 파이썬 코드용.
launch.json
디버깅을 시작할 모드를 지정합니다.
- |_+_|: |_+_|에 지정된 파일에서 디버거 시작
- |_+_|: 이미 실행 중인 프로세스에 디버거를 연결합니다. 보다 원격 디버깅 예를 들어.
launch.json
파이썬 프로그램의 엔트리 모듈(시작 파일)에 대한 완전한 경로를 제공합니다. 기본 구성에서 자주 사용되는 |_+_| 값은 편집기에서 현재 활성화된 파일을 사용합니다. 특정 시작 파일을 지정하면 열려 있는 파일에 관계없이 항상 동일한 진입점으로 프로그램을 시작할 수 있습니다. 예를 들어:
python.pythonPath
작업 공간 루트의 상대 경로를 사용할 수도 있습니다. 예를 들어 루트가 |_+_|인 경우 그런 다음 다음을 사용할 수 있습니다.
pythonPath
launch.json
디버깅에 사용할 Python 인터프리터를 가리킵니다. 이 인터프리터는 Python 인터프리터가 포함된 폴더일 수 있습니다. 값은 |_+_|와 같은 변수를 사용할 수 있습니다. 그리고 |_+_|.
지정하지 않으면 이 설정은 기본적으로 |_+_| 값 |_+_|를 사용하는 것과 동일합니다. 다른 인터프리터를 사용하려면 |_+_| 디버그 구성의 속성입니다.
|_+_|를 배치하여 플랫폼별 경로를 지정할 수 있습니다. |_+_|, |_+_| 또는 |_+_|라는 상위 개체 내에서. 예를 들어 PySpark의 구성은 다음 값을 사용합니다.
python.pythonPath
또는 각 플랫폼에 정의된 사용자 지정 환경 변수를 사용하여 사용할 Python 인터프리터의 전체 경로를 포함하여 추가 폴더 경로가 필요하지 않도록 할 수 있습니다.
launch.json
Python 프로그램에 전달할 인수를 지정합니다. 공백으로 구분된 인수 문자열의 각 요소는 따옴표 안에 포함되어야 합니다. 예를 들면 다음과 같습니다.
{ 'name': 'Python: Current File (Integrated Terminal)', 'type': 'python', 'request': 'launch', 'program': '${file}', 'console': 'integratedTerminal' }, { 'name': 'Python: Current File (External Terminal)', 'type': 'python', 'request': 'launch', 'program': '${file}', 'console': 'externalTerminal' }
args
|_+_|로 설정하면 디버깅 중인 프로그램의 첫 번째 줄에서 디버거를 중단합니다. 생략하거나(기본값) |_+_|로 설정하면 디버거가 프로그램을 첫 번째 중단점까지 실행합니다.
startup.py
프로그램 출력이 표시되는 방법을 지정합니다.
--port 1593
코드에 사용되는 상대 경로의 기본 폴더인 디버거의 현재 작업 디렉터리를 지정합니다. 생략하면 기본값은 |_+_| (VS Code에서 열린 폴더).
예를 들어 |_+_| 포함 |_+_| |_+_|가 포함된 폴더 및 |_+_| |__+_|가 포함된 폴더. |_+_|에서 디버거를 시작하면 데이터 파일에 대한 상대 경로는 |_+_| 값에 따라 달라집니다.
{ 'name': 'Python: startup.py', 'type': 'python', 'request': 'launch', 'program': '${workspaceFolder}/startup.py', 'args' : ['--port', '1593'] },
생략되거나 |_+_|로 설정된 경우 (기본값), 디버거가 프로그램의 모든 출력을 VS Code 디버그 출력 창에 인쇄하도록 합니다. |_+_|로 설정하면 디버거 출력 창에 프로그램 출력이 표시되지 않습니다.
이 옵션은 일반적으로 |_+_|를 사용할 때 비활성화됩니다. 또는 |_+_| 디버그 콘솔에서 출력을 복제할 필요가 없기 때문입니다.
name
생략되거나 |_+_|로 설정된 경우 (기본값), 디버깅을 사용자 작성 코드로만 제한합니다. |_+_|로 설정 또한 표준 라이브러리 기능의 디버깅을 활성화합니다.
type
|_+_|로 설정하면 Django 웹 프레임워크에 특정한 디버깅 기능을 활성화합니다.
python
|_+_|로 설정 시 |_+_|와 함께 사용하면 권한 상승이 필요한 앱을 디버깅할 수 있습니다. 비밀번호를 캡처하려면 외부 콘솔을 사용해야 합니다.
request
|_+_|로 설정하면 피라미드 앱이 필요한 |_+_| 명령 .
launch
디버거가 항상 상속하는 시스템 환경 변수 외에 디버거 프로세스에 대한 선택적 환경 변수를 설정합니다. 이러한 변수의 값은 문자열로 입력해야 합니다.
처음부터 로지스틱 회귀 파이썬
program
환경 변수 정의가 포함된 파일의 선택적 경로입니다. 보다 Python 환경 구성 - 환경 변수 정의 파일 .
attach
|_+_|로 설정하면 디버깅을 활성화합니다. 벤트 원숭이 패치 코드 .
코드에서 중단점 호출
Python 코드에서 |_+_|를 호출할 수 있습니다. 디버깅 세션 동안 디버거를 일시 중지하려는 모든 지점.
중단점 유효성 검사
Python 확장은 |_+_|와 같이 실행할 수 없는 줄에 설정된 중단점을 자동으로 감지합니다. 문장 또는 여러 줄 문장의 중간. 이러한 경우 디버거를 실행하면 중단점이 가장 가까운 유효한 줄로 이동하여 해당 지점에서 코드 실행이 중지됩니다.
로컬 스크립트에 첨부
일부 시나리오에서는 다른 프로세스에서 로컬로 호출한 Python 스크립트를 디버그해야 합니다. 예를 들어, 특정 처리 작업에 대해 다른 Python 스크립트를 실행하는 웹 서버를 디버깅 중일 수 있습니다. 이러한 경우 스크립트가 실행되면 VS Code 디버거를 스크립트에 연결해야 합니다.
-
VS Code를 실행하고 스크립트가 포함된 폴더 또는 작업 공간을 열고 |_+_| 해당 작업 공간이 아직 없는 경우 해당 작업 공간에 대해
-
스크립트 코드에서 다음을 추가하고 파일을 저장합니다.
program
-
다음을 사용하여 터미널 열기 터미널: 새 통합 터미널 만들기 , 스크립트의 선택된 환경을 활성화합니다.
-
터미널에서 |_+_|를 사용하여 ptvsd 패키지를 설치합니다.
-
터미널에서 스크립트를 사용하여 Python을 시작합니다(예: |_+_|). 코드에 포함된 Waiting for debugger attach 메시지가 표시되고 스크립트가 |_+_|에서 중지됩니다. 전화.
-
디버그 보기로 전환하고 파이썬: 첨부 디버거 드롭다운 목록에서 디버거를 시작합니다.
-
디버거는 |_+_| 호출하면 디버거를 정상적으로 사용할 수 있습니다. 물론 |_+_|를 사용하는 대신 스크립트 코드에서 다른 중단점을 설정할 수 있습니다.
메모 : 앞으로 Python 확장은 호스트 및 포트 대신 프로세스 ID로 디버거 연결을 지원합니다. 보다 1078호 .
원격 디버깅
원격 디버깅을 사용하면 원격 컴퓨터에서 실행되는 동안 VS Code 내에서 로컬로 프로그램을 단계별로 실행할 수 있습니다. 원격 컴퓨터에 VS Code를 설치할 필요는 없습니다.
-
두 컴퓨터: 동일한 소스 코드를 사용할 수 있는지 확인하십시오.
-
두 컴퓨터 모두: 설치 ptvsd 사용 |_+_| (가상 환경의 형태를 사용할 필요는 없지만 권장되는 모범 사례임)
-
원격 컴퓨터: 적절한 방화벽 또는 기타 네트워킹 구성에서 디버깅에 사용할 포트를 엽니다.
-
원격 컴퓨터: 원격 프로세스에 연결하는 방법을 지정하는 두 가지 방법이 있습니다. 해당하는 경우 원격 컴퓨터의 개인 IP 주소를 지정해야 할 수 있습니다(예: Azure의 Linux VM에는 공용 주소와 개인 주소가 모두 있음). 공용 IP 주소를 사용하는 경우 요청한 주소를 할당할 수 없음 오류가 표시될 수 있습니다.
-
소스 코드에서 |_+_|를 대체하여 다음 행을 추가하십시오. 원격 컴퓨터의 IP 주소 및 포트 번호(IP 주소 1.2.3.4는 설명을 위해 여기에 표시됨).
${file}
|_+_|에 사용된 IP 주소 원격 컴퓨터의 개인 IP 주소여야 합니다. 그런 다음 프로그램을 정상적으로 실행하여 디버거가 연결될 때까지 프로그램을 일시 중지할 수 있습니다.
-
예를 들어 ptvsd를 통해 원격 프로세스를 시작합니다.
'program': '/Users/Me/Projects/PokemonGo-Bot/pokemongo_bot/event_handlers/__init__.py',
패키지 시작 |_+_| |_+_| 사용, 원격 컴퓨터의 개인 IP 주소 |_+_| 포트에서 수신 대기 |_+_| (|_+_|를 사용하는 대신 파일 경로를 지정하여 원격 Python 프로세스를 시작할 수도 있습니다.)
-
로컬 컴퓨터: 위에서 설명한 대로 원격 컴퓨터에서 소스 코드를 수정한 경우에만 , 그런 다음 소스 코드에서 원격 컴퓨터에 추가된 동일한 코드의 주석 처리된 복사본을 추가합니다. 이 줄을 추가하면 두 컴퓨터의 소스 코드가 줄 단위로 일치합니다.
/Users/Me/Projects/PokemonGo-Bot
-
로컬 컴퓨터: VS Code에서 디버그 보기로 전환하고 파이썬: 첨부 설정(톱니바퀴) 아이콘을 선택하여 엽니다. |_+_| 그 구성에.
-
로컬 컴퓨터: |_+_| 원격 컴퓨터의 파일 시스템에서 프로그램의 위치를 제공합니다. 수정 |_+_| 그리고 |_+_| |__+_|의 값과 일치시키려면 |_+_|에 원격 컴퓨터의 공용 IP 주소를 사용해야 한다는 점을 제외하고 소스 코드에 추가된 호출. 당신은 또한 변경할 수 있습니다 |_+_| 구성을 구체적으로 식별합니다. 예를 들어:
'program': '${workspaceFolder}/pokemongo_bot/event_handlers/__init__.py',
-
로컬 컴퓨터: 디버깅을 시작하려는 코드에 중단점을 설정합니다.
팁 : |__+_| 바로 다음에 오는 명령문에 단일 중단점 설정 라인이 작동하지 않을 수 있습니다. 다른 명령문에 하나 이상의 다른 중단점을 설정하십시오.
- 로컬 컴퓨터: 수정된 버전을 사용하여 VS Code 디버거 시작 파이썬 첨부 구성. VS Code는 코드를 단계별로 실행하고, 변수를 검사하고, 다른 모든 디버깅 작업을 수행할 수 있도록 로컬로 설정된 중단점에서 중지되어야 합니다. 에 입력하는 표현식 디버그 콘솔 원격 컴퓨터에서도 실행됩니다.
|_+_|에서와 같이 stdout으로의 텍스트 출력 두 컴퓨터에 모두 나타납니다. 그러나 matplotlib와 같은 패키지의 그래픽 플롯과 같은 다른 출력은 원격 컴퓨터에만 나타납니다.
- 원격 디버깅 중에 디버깅 도구 모음이 아래와 같이 나타납니다.
이 도구 모음에서 연결 해제 버튼(|_+_|)은 디버거를 중지하고 원격 프로그램이 완료될 때까지 실행되도록 합니다. 다시 시작 버튼(|_+_|)은 로컬 컴퓨터에서 디버거를 다시 시작하지만 ~ 아니다 원격 프로그램을 다시 시작하십시오. 원격 프로그램을 이미 다시 시작했고 디버거를 다시 연결해야 하는 경우에만 다시 시작 버튼을 사용하십시오.
SSH를 통한 디버깅
어떤 경우에는 디버깅할 때 원격 컴퓨터에 대한 보안 연결을 원하거나 사용해야 할 수 있습니다. Windows 컴퓨터에서는 다음을 설치해야 할 수 있습니다. OpenSSH 또는 윈도우 10 오픈SSH |_+_| 명령.
원격 컴퓨터에서:
-
|_+_|를 열어 포트 전달을 활성화합니다. config 파일(Linux의 경우 |__+_| 아래에 있고 Windows의 경우 |_+_| 아래에 있음) 및 다음 설정을 추가하거나 수정합니다.
pythonPath
-
SSH 서버를 다시 시작하십시오. Linux/macOS에서 실행 |_+_|; Windows에서는 |_+_|를 실행하고 OpenSSH를 찾아 선택하거나 |_+_| 서비스 목록에서 선택하고 재시작 .
-
Python 프로그램을 시작하고 이전 섹션에서 설명한 대로 디버거가 연결될 때까지 기다립니다.
로컬 컴퓨터에서:
-
|_+_|에 대해 선택한 포트를 사용하여 |_+_|를 실행하여 SSH 터널을 만듭니다. |__+_|에 해당 사용자 이름과 원격 컴퓨터의 IP 주소가 있습니다. 예를 들어, IP 주소 1.2.3.4에서 포트 3000을 사용하려면 명령은 |_+_|입니다.
-
SSH 세션에서 프롬프트가 표시되는지 확인합니다.
-
VS Code에서 |__+_|의 디버그 구성에서 포트를 설정합니다. |_+_|에 사용된 포트와 일치하도록 명령을 실행하고 호스트를 |__+_|로 설정합니다. 사용 |_+_| SSH 터널을 설정했기 때문에 여기에 있습니다.
-
프로그램을 시작하고 이전 섹션에서 설명한 대로 디버거를 연결합니다.
특정 앱 유형 디버깅
구성 드롭다운은 일반 앱 유형에 대해 다양한 옵션을 제공합니다.
원격 디버깅 및 Google App Engine에도 특정 단계가 필요합니다. 디버깅 테스트(nosetest 포함)에 대한 자세한 내용은 다음을 참조하세요. 테스트 .
관리자 권한이 필요한 앱을 디버그하려면 |_+_| 그리고 |_+_|.
플라스크 디버깅
${workspaceFolder}
보시다시피 이 구성은 |_+_| 그리고 |_+_|. |_+_| 속성이 |_+_| 대신 사용됩니다. (|_+_| 속성에 |_+_|가 표시될 수 있습니다. 이 경우 파일 이름만 참조하도록 구성을 수정합니다. 그렇지 않으면 C가 드라이브 문자인 모듈 C를 가져올 수 없음 오류가 표시될 수 있습니다.)
|_+_| 설정은 또한 Flask의 기본 Jinja 템플릿 엔진에 대한 디버깅을 활성화합니다.
Flask의 개발 서버를 개발 모드로 실행하려면 다음 구성을 사용하세요.
${workspaceFolder}/.venv
구글 앱 엔진 디버깅
Google App Engine은 앱을 자체적으로 시작하므로 VS Code 디버거에서 앱을 직접 시작하는 것은 불가능합니다. 대신 필요한 것은 앱에서 ptvsd를 사용한 다음 VS Code가 디버거를 연결할 수 있도록 하는 모드에서 Google App Engine을 시작하는 것입니다.
-
ptvsd 다운로드 작업 폴더의 ptvsd 폴더에 파일을 추출합니다. (다른 폴더를 사용하는 경우 4단계에서 생성한 |__+_| 파일의 경로를 수정합니다.)
-
만들기 |_+_| 다음 내용이 포함된 파일:
python.pythonPath
-
Windows 및 Linux에서는 |__+_|의 첫 번째 항목을 교체합니다. Google App Engine이 설치된 곳의 경로와 함께(위 소스 코드에 표시된 경로는 macOS용)
-
이름이 |_+_|인 파일을 만듭니다. 다음 내용이 있는 프로젝트 루트에서 다음과 같이 수정합니다.
${config:python.pythonPath}
-
만들기 |_+_| 를 사용하여 구성 첨부(원격 디버그) 템플릿으로 구성합니다. 포트 값이 위의 소스 코드에 있는 것과 일치하는지 확인하십시오.
-
추가 |_+_| |_+_|로.
-
명령 팔레트에서 다음을 실행하십시오. 빌드 작업 실행 명령. 이 명령은 다양한 메시지를 볼 수 있는 작업 출력 창을 엽니다.
-
Google App Engine이 시작되었다는 메시지가 표시되면 디버거를 연결할 준비가 되면 원격 디버깅 구성을 사용하여 VS Code 디버거를 시작합니다.
-
원하는 위치에 중단점을 설정한 다음 브라우저를 시작하여 앱을 시작합니다.
문제 해결
디버거가 작동하지 않는 데에는 여러 가지 이유가 있습니다. 종종 디버그 콘솔은 특정 원인을 나타내지만 두 가지 구체적인 이유는 다음과 같습니다.
-
python 실행 파일의 경로가 올바르지 않습니다. |_+_| 값을 확인하세요. 사용자 설정에서.
-
조사식 창에 잘못된 표현식이 있습니다(아래 예와 같이). 조사식 창에서 모든 표현식을 지우고 디버거를 다시 시작하십시오.
pythonPath
-
네이티브 스레드 API(예: Python 스레딩 API가 아닌 Win32 |_+_| 함수)를 사용하는 다중 스레드 앱으로 작업하는 경우 현재 파일 상단에 다음 소스 코드를 포함해야 합니다. 디버그하고 싶은 것:
pythonPath
#파이썬 #vscode