将 VSCode 调试器附加到 Python 中的子进程

aro*_*ick 2 python python-3.x visual-studio-code

我有一个脚本可以有效地执行以下操作:

顶部脚本.py:

os.system("bash_script.sh")
Run Code Online (Sandbox Code Playgroud)

bash_script.sh

python3 child_script.py
Run Code Online (Sandbox Code Playgroud)

子脚本.py

# Actual work goes here
Run Code Online (Sandbox Code Playgroud)

在 VSCode 中,我喜欢集成调试器,但是当我按照他们的建议[1]从 IDE 启动时,我得到“ECONNREFUSED 127.0.0.1:5678”。

当我从 VSCode 中的集成终端执行以下命令时,它运行时没有错误,但它不会在 child_script.py 中的断点处停止。

python3 -m debugpy --listen 5678 top_script.py
Run Code Online (Sandbox Code Playgroud)

如何首先执行顶部脚本(从 IDE 或命令行)并让我在 child_script.py 中附加的断点在 VSCode 中呈现?

[1] https://code.visualstudio.com/docs/python/debugging

Rex*_*ker 5

您可以将配置添加到launch.json文件,如下所示:

{
        "name": "MySubProcess",
        "type": "python",
        "request": "attach",
        "processId": "${command:pickProcess}"
}
Run Code Online (Sandbox Code Playgroud)

现在单独启动你的 python 进程(通过提示,或者无论如何)。这将生成一个 python 子进程。您可以在 Windows 任务管理器中看到这一点(或者在 MacOS 活动监视器中,或者在 Linux 中以类似的方式)。

在 VSCode 中,单击Debug,(在上面的示例中选择您的子进程配置:“MySubProcess”),然后选择刚刚启动的进程。然后,调试器将在子进程代码中的断点处停止。