使用VSCode远程调试本地Docker容器中的Python代码



背景:我们有Sphinx,一个用于生成文档的Python应用程序,在Docker容器中运行。我在转换dravio文件时遇到了一个问题。当在我们的GitLab管道中执行时,它执行得很好,但当项目在我的M2 Mac上本地执行时,无法转换图像并引发异常。实际上,我已经通过在M2机器上重建容器来解决了这个问题,从而安装了所需包的M2版本。我仍然希望能够学习如何正确设置调试器。

情况:我一直在挖掘Sphinx源代码,添加调试打印。当我最终看不到我们去了哪里时,我几乎走到了Traceback。因此,我现在正在研究运行带有实时调试器的sphinx
我有:

  • 使用docker run ... -p 5678:5678打开了我的容器上的5678端口
  • 已在容器中安装调试
  • 已使用python3 -m debugpy --wait-for-client --listen 0.0.0.0:5678 /opt/venv/bin/sphinx-build [lots of switches and options]在容器中启动调试
  • 使用这个launch.json从容器外的VSCode附加到容器内等待的可调试进程;Python:远程启动";点击"替换"后;创建launch.json文件">
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Remote Attach",
"type": "python",
"request": "attach",
"connect": {
"host": "localhost",
"port": 5678
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "."
}
],
"justMyCode": true
}
]
}

等待过程开始运行,我可以在VSCode调试控制台中看到它的输出。如果我暂停执行,我会看到实际的源代码,但它不是我在本地回购中的源代码。特定的源文件以某种方式从容器中打开。当我将鼠标悬停在VSCode中打开的源文件的选项卡上时/opt/venv/python3.10/site-packages/sphinx/application.py";其不是本地存在的路径
在这个打开的文件中,我还可以设置断点和读取变量值,正如您从正确的调试器中所期望的那样。然而,很明显,我在本地文件中设置的断点都没有被命中
这是一个问题,因为我希望能够提前浏览源代码并设置断点。今天我只能继续前进,希望打开正确的文件。

想要:我想要的是连接本地存储库的文件,或者能够从VSCode中浏览远程文件系统。

您可以尝试远程ssh。

根据文件,

Visual Studio Code Remote-SSH扩展允许您在任何远程计算机、虚拟机或运行SSH服务器的容器上打开远程文件夹,并充分利用VS Code的功能集。一旦连接到服务器,就可以与远程文件系统上任何位置的文件和文件夹进行交互。

最新更新