在 VSCode、Python 中,每次调试时调试器都会启动一个新的终端

In VSCode, Python debugger launches a new Terminal every time I debug

在 Python 中调试时,在 VS Code 中,每次调试都会创建一个新终端。代码只是不断地在终端 window 的下拉列表中每次添加一个终端。我必须手动删除每个终端,或者在一段时间后删除一堆 - 否则代码最终会挂起。

是否有选项设置可以停止此操作?这是预期的行为还是缺陷?


更新: 这是每次创建新调试终端时发生的情况的屏幕截图。这是终端 window 右侧的下拉菜单,您可以使用 ctrl-` 打开或转到(坟墓键,非移动波浪号或 ~ 键).它显示了正常的 bash 终端,一个 Python 终端,每次你 运行 a脚本,但 3 Python 调试控制台 windows。每次调试 (F5) 时都会创建一个新的 Python 调试控制台 。所以每次调试都需要进去手动删除一个Python Debug Console(打右边的垃圾桶图标)。在我意识到它正在发生之前,它已经打开了 20 多个终端 windows。

更新(~9/2021):

最新版本的 VS Code(~v1.60 及更高版本)已经重新设计了一些核心测试基础结构,这可能不是什么大问题。但是,我仍然 运行 偶尔会喜欢它。

即使没有以下内容,通常也能正常工作的一件事似乎是避免“重新启动调试”按钮。如果您只是停止调试会话然后重新启动,但是您首先启动它,我很少得到多重会话 windows.

真正的解决方案:让终端在之后退出!

终于找到了一个真正的解决方案(好吧,有点老套), - 至少如果你使用 Git Bash 作为你的默认终端。

如果您在调试配置中添加参数 &&exit,调试终端将在您的程序结束后自动退出。不过请注意,它会立即关闭终端及其中的所有文本(您可能需要在脚本末尾添加“按任意键结束程序”,以便您有时间查看任何文本,或类似的内容那个)。

Note: This is still a hack and it doesn't always work - if you hit the "restart" or "stop" buttons on the debugger toolbar, it will shortcut this method

&& 基本上告诉 Bash 停止并等待调试任务完成,然后再继续其他命令,然后 exit 将在调试会话结束后执行,关闭终端。

您可以通过如下方式打开 run/debug 配置来执行此操作:

  1. 转到边栏中的“运行”window
  2. Select下拉菜单中的运行配置然后按齿轮,会在编辑器中调出对应的launch.json文件window.

  1. 如下所示添加 args: ["&&", "exit"] 行,并确保在上面那行的末尾添加一个逗号!!

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: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "args": ["&&", "exit"]
        }
    ]
}

注意 1: 该答案中的评论表明您可能想尝试 "args": ["\n", "exit", "0"] 如果这不起作用。这可能适用于不同的终端类型(Windows Cmd Prompt、PowerShell、不同的 Linux shell 等)。

注意2:如果您需要添加其他参数,您可以将它们作为字符串添加到列表中的“&&”参数之前。放在列表前面的项目将成为您实际 program/script.

的参数

替代(原始)解决方案:使用调试控制台进行输出

经过一些搜索后,我无法确定是否为每次调试启动新终端的预期行为,但有一个解决方法。

Python 设置调试配置:当前文件。在调试选项卡上,单击顶部的齿轮图标以打开 launch.json

注意: 下面的调试图标略有变化,此选项卡现在称为Run 而不是 Debug

launch.json中,将"console"设置由默认的"integratedTerminal"改为"internalConsole",如下图:

{   "version": "0.2.0",
    "configurations": [
        {   "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "internalConsole"
        }
    ]
}

这将导致任何调试会话的所有输出仅发生在 DEBUG CONSOLE 中,它在每个会话中被清除并重新使用,而不是在每个会话中生成一个新的集成终端。


缺点

我最终返回到集成终端以获取需要用户在控制台输入的脚本,因为调试控制台不允许用户输入。

在那种情况下,您只需要不断删除额外的调试会话 - 有点痛苦。