【问题标题】:Attaching a VSCode Debugger to a Sub Process in Python在 Python 中将 VSCode 调试器附加到子进程
【发布时间】:2020-08-25 08:52:36
【问题描述】:

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

top_script.py:

os.system("bash_script.sh")

bash_script.sh

python3 child_script.py

child_script.py

# Actual work goes here

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

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

python3 -m debugpy --listen 5678 top_script.py

如何先执行顶层脚本(从 IDE 或命令行),然后在 VSCode 中呈现我在 child_script.py 中附加的断点?

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

【问题讨论】:

    标签: python python-3.x visual-studio-code


    【解决方案1】:

    问题在于,通过使用os.system(),调试器不知道您启动了另一个您关心的 Python 解释器。您需要做的是附加到第二个过程。详细信息将根据您的设置方式而有所不同,但您可以将https://code.visualstudio.com/docs/python/debugging#_local-script-debugging 作为起点。

    【讨论】:

    • 好的!那么我是否将这段代码放在第二个脚本中?并从命令行启动它,然后在它暂停时启动VS Code调试?
    • 基本上,是的。您也可以从 VS Code 启动它,它应该等待其他进程启动(如果您从命令行启动它,您可以执行“附加到进程”)。
    【解决方案2】:

    这很简单。您可以向 launch.json 文件添加配置,如下所示:

    {
            "name": "MySubProcess",
            "type": "python",
            "request": "attach",
            "processId": "${command:pickProcess}
    }
    

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

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

    【讨论】:

    • 优秀!正是我想要的! (好吧,具体来说,如果我可以命名子流程以便它自动选择,那就更好了)
    【解决方案3】:

    我听从了 RexBarker 的建议,但 VSC 总是给我一个错误“等待调试服务器连接超时”。为了找出原因,在配置中启用了“日志到文件”,如下所示,

    {
        "name": "MySubProcess",
        "type": "python",
        "request": "attach",
        "processId": "${command:pickProcess}",
        "logToFile": true
    }
    

    然后我可以在 VSC 主机上的日志文件中找到详细的错误,该文件位于 ~/.local/share/code-server/extensions/ms-python.python-2021.5.926500501/debugpy.adapter- {pid}.log

    它告诉我找不到'gdb'。在我安装 gdb 后,它按预期工作。

    【讨论】:

      猜你喜欢
      • 2018-10-15
      • 2018-09-23
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 2019-01-31
      • 1970-01-01
      • 2019-08-12
      相关资源
      最近更新 更多