web-dev-qa-db-ja.com

Visual Studio Code-Dockerコンテナーのコードをリモートデバッグする方法pythonコード

Iamはリモートデバッグをしようとしていますpython VSCで:

それはmain.pyファイルです:

print('Hello, World')

debug.py:

import ptvsd
ptvsd.enable_attach('my_secret', address=('0.0.0.0', 7102))
ptvsd.wait_for_attach()

Dockerfile:

FROM python:3.6-slim

EXPOSE 7102

RUN pip install ptvsd

WORKDIR /app

COPY . .

CMD ["python", "debug.py"]

そしてそれはlaunch.jsonファイルです:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach (Remote Debug)",
            "type": "python",
            "request": "attach",
            "localRoot": "${workspaceRoot}",
            "remoteRoot": "/app",
            "port": 7102,
            "secret": "my_secret",
            "Host": "172.17.0.3"
        }
    ]
}

コンテナーをビルドして開始するコマンドです。

docker build -t python-for-debug。

docker run -it -p 7102:7102 python-for-debug

デバッガーを実行すると、次のようになります。 vsコードの画面

デバッグコンソールにエラーはなく、出力も問題もありません。実行中のコンテナの出力はありません。 Dockerログなし

VSコードバージョン:1.15.0 Dockerバージョン17.06.0-ce、ビルド02c1d87

12
user7316356

こんにちは、ptvsd 3を使用する必要があるため、DockerfileのRUN行を次のように変更します。

RUN pip3 install ptvsd==3.0.0

ローカルでptvsdインストールも実行します。

$pip3 install ptvsd==3.0.0

詳細については https://code.visualstudio.com/docs/python/debugging#_remote-debugging を参照してください。これでうまくいきました。

5
Marcelo Rossi

8月12日を編集

何が問題かを確認するために、テストバージョンをセットアップしました。問題は、Visual Studio Codeが接続する前に失敗したデバッガーに接続しないことです。

例外はJSコードにあります。

Visual Studio Error Log

Githubにも未解決の問題があります

https://github.com/DonJayamanne/pythonVSCode/issues/805

あなたの最善の策は、問題にこれらの詳細を追加するか、新しいものを開くことです

元の回答:

あなたが見ている行動は実際には正しいです。私はあなたのスクリーンショットを見ました、そしてあなたはあなたのクライアントスクリプトに「Hello World」を印刷しました、そして以下のコードはあなたのリモートにあります

import ptvsd
ptvsd.enable_attach('my_secret', address=('0.0.0.0', 7102))
ptvsd.wait_for_attach()

以下のURLが表示された場合

https://donjayamanne.github.io/pythonVSCodeDocs/docs/debugging_remote-debugging/

以下の見積もりを読む

両方のスクリプトファイル(つまり、ローカルマシンとリモートマシンの両方のスクリプト)に上記の変更を加えます。ただし、クライアント側では、上記の2行がコメント化されていることを確認してください。これは、サーバーに同じ行番号があり、それらが一致することを確認するために必要です。

コードデバッグの実行はすべてコンテナ内で行われます。ローカルマシンのコードは、コンテナー内のコードがどの行であるかを視覚化できるようになりますが

2
Tarun Lalwani

問題は、Dockerプロセスが終了することだと思います。

Dockerfileでコマンドとしてdebug.pyを開始します。したがって、Dockerはタスクを開始し、デバッガーがアタッチするのを待ってから、何もする必要がないため終了します。

最も簡単な方法として、コードをdebug.pyに配置する必要があるようです。また、直後にブレークポイントを置くことはできません。

ptvsd.wait_for_attach()

そのため、間に予備の行をいくつか作成することをお勧めします。
お役に立てれば。

0
mgremlin