更新(~9/2021):
最近的VS Code版本(~v1.60及更高版本)已经重新设计了一些核心测试基础设施,这可能不再是一个大问题。然而,我偶尔还是会遇到这个问题。
有一件事情通常可以解决这个问题,即使没有下面的方法,那就是避免使用“重新启动调试”按钮。如果你只是停止调试会话,然后以最初的方式重新启动,我很少会出现多个会话窗口。
注意:Git Bash的问题
当启动调试器时,我也遇到了Git Bash的间歇性问题。经过一些研究发现,Git Bash不能保证与VS Code完全兼容,并且在来回通信时有时会丢失字符。
将默认终端切换为命令提示符或PowerShell似乎可以解决这个问题。我还没有找到一种指定调试使用哪个终端的方法。
一个真正的解决方案:在程序结束后让终端退出!
终于找到了一个真正的解决方案(虽然有点小技巧),
在这个答案中 - 至少如果你使用Git Bash作为默认终端的话。
如果你在调试配置中添加参数
&&
和
exit
,调试终端将在程序结束后自动退出。不过要注意,它会立即关闭终端,并清除其中的所有文本(你可能需要在脚本末尾添加一个“按任意键结束程序”的提示,以便你有时间查看任何文本,或者类似的操作)。
注意:这仍然是一种技巧,并且并不总是有效 - 如果你点击调试工具栏上的“重新启动”或“停止”按钮,它将绕过这种方法
&&
基本上告诉Bash在继续执行其他命令之前停下来等待调试任务完成,然后
exit
会在调试会话结束后执行,从而关闭终端。
你可以通过以下方式打开运行/调试配置:
- 在侧边栏中打开“运行”窗口
- 从下拉菜单中选择运行配置,然后点击齿轮图标,这将在编辑器窗口中打开相应的
launch.json
文件。
将以下行添加到
args: ["&&", "exit"]
下方,并确保在上一行的末尾添加逗号!
launch.json:
{
"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:如果你需要添加其他参数,你可以在列表中的"&&"参数之前以字符串形式添加它们。列表中较早放置的项目将成为你实际程序/脚本的参数。
替代方案(原始#1):使用调试控制台进行输出
经过一些搜索,我无法确定每次调试是否都会启动一个新的终端,但有一个解决方法。
设置您的调试配置为Python:当前文件。在调试选项卡上方,单击齿轮图标以打开launch.json
注意: 下面的调试图标略有变化,此选项卡现在称为运行
而不是调试
在 `launch.json` 中,将 `"console"` 设置从默认值 `"integratedTerminal"` 更改为 `"internalConsole"`,如下所示:
{ "version": "0.2.0",
"configurations": [
{ "name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "internalConsole"
}
]
}
这将导致任何调试会话的所有输出仅在DEBUG CONSOLE中发生,该控制台在每个会话中被清除和重用,而不是在每个会话中生成一个新的集成终端。
缺点
对于那些需要在控制台上接收用户输入的脚本,我最终还是回到了集成终端,因为调试控制台不允许用户输入。
在这种情况下,你只需要不断删除多余的调试会话 - 有点麻烦。