Python
debug
docker
VSCode

VSCodeからDocker for Windowsのpythonにリモートデバッグ(ptvsd==4.1.3)

VSCodeからDocker for Windowsのpythonにリモートデバッグする

要約

  • ptvsd==3.0.0という記事は古い => 最新版でよい
  • ポート3000って意味ある? => デフォは5678
  • 一次情報にも触れましょう PyPI / git

VSCode準備

確認したバージョン

  • VSCode本体 1.28.0
  • VSCode拡張
    • Docker(peterjausovec.vscode-docker) 0.3.1
    • Python(ms-python.python) 2018.9.0

デバッグ実行するコード

  • ptvsd.enable_attach()にしてます、ほかの設定に合わせてパラメータでポートいじれます
    • 定義はenable_attach(address=(DEFAULT_HOST, DEFAULT_PORT), redirect_output=True)
    • およびDEFAULT_HOST = '0.0.0.0'
    • そしてDEFAULT_PORT = 5678
sample.py
import ptvsd
ptvsd.enable_attach()
ptvsd.wait_for_attach()
ptvsd.break_into_debugger()

file = open('/etc/os-release')
content = file.read()
print(content)
file.close()

デバッグ実行準備

launch.json
    {
      "name": "Python: Attach",
      "type": "python",
      "request": "attach",
      "port": 5678,
      "host": "localhost",
      "localRoot":  "${workspaceFolder}",
      "remoteRoot": "/app"
    },

Docker準備

ファイルツリー
workspace
│  .dockerignore
│  docker-compose.yml
│  Dockerfile
│  requirements.txt
│  sample.py
│
└─.vscode
       launch.json
  • ポート5678開放
Dockerfile
FROM python:3.6.6-slim-stretch
LABEL Name=pyremotedebug Version=0.0.1
EXPOSE 5678
WORKDIR /app
ADD . /app
RUN python -m pip install -r requirements.txt
  • ptvsdは4.1.3
requirements.txt
ptvsd==4.1.3
  • よその記事みたいにポート3000でもいいけど、衝突しなければ何でもいいです
docker-compose.yml
version: '2.1'

services:
  pyremotedebug:
    image: pyremotedebug
    build: .
    ports:
      - 5678:5678
    volumes: 
      - .:/app
    command: >
      python
      /app/sample.py
  • (一度だけ)dockerイメージつくる
    • docker-compose build

デバッグ実行

  • コンテナ起動しつつ

    • docker-compose up -d
      • 二度目以降はVSCode的には、Dockerのアイコン=>DOCKER EXPLORER=>Containers=>目当てのコンテナを右クリ=>Restart Containerでしょうか
      • 統合ターミナルで上+Enterの方が楽か
  • 環境Python: Attachでデバッグ実行する

    • sample.pyのLine6 file = open('/etc/os-release') で止まるはず

以上