Visual Studio Code - 如何在 Docker 容器中远程调试 python 代码

Posted

技术标签:

【中文标题】Visual Studio Code - 如何在 Docker 容器中远程调试 python 代码【英文标题】:Visual Studio Code - how to remote debug python code in a Docker Container 【发布时间】:2018-01-20 16:12:20 【问题描述】:

我正在尝试在 VSC 中远程调试 python:

是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

当我运行调试器时,我得到: screen of vs code

调试控制台没有任何错误,没有输出,没有问题。运行容器没有任何输出。没有码头工人日志

VS 代码版本:1.15.0 Docker 版本 17.06.0-ce,构建 02c1d87

【问题讨论】:

这些有帮助吗? docs.microsoft.com/en-us/visualstudio/python/… Visual Studio 和 Visual Studio Code 是不是不同的编辑器 您在 docker 上使用哪个操作系统? Linux rpc 4.10.0-32-generic #36~16.04.1-Ubuntu SMP Wed Aug 9 09:19:02 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 【参考方案1】:

您好,您应该使用 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 这对我有用,希望对您有所帮助。

【讨论】:

【参考方案2】:

我认为问题在于您的 docker 进程终止了。

您将 debug.py 作为 Dockerfile 中的命令启动。所以 Docker 启动任务,等待你的调试器附加然后退出,因为没有什么可做的了。

似乎您需要将代码放入 debug.py 作为最简单的尝试。请记住,您不能将断点放在

之后
ptvsd.wait_for_attach()

所以你最好在中间写一些空行。 希望这会有所帮助。

【讨论】:

wait_for_attach() 被阻塞,所以在调试器附加之前python不会退出【参考方案3】:

编辑 12 月 12 日

我设置了一个测试版本,看看可能出了什么问题。问题是 Visual Studio Code 没有连接到调试器,它在仅连接之前就失败了

请参阅他们的 JS 代码中的异常。

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()

如果您看到以下网址

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

阅读下面的报价

在两个脚本文件中进行上述更改(即本地和远程计算机上的脚本)但是在客户端,确保将上述两行注释掉,即这对于确保我们在服务器上具有相同的行号并且它们匹配是必要的。

代码调试的执行都发生在您的容器内。而你在本地机器上的代码更能够可视化容器内的代码是哪一行

【讨论】:

我将这行添加到 main.py 中,但没有效果

以上是关于Visual Studio Code - 如何在 Docker 容器中远程调试 python 代码的主要内容,如果未能解决你的问题,请参考以下文章