在 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 配置来执行此操作:
- 转到边栏中的“运行”window
- Select下拉菜单中的运行配置然后按齿轮,会在编辑器中调出对应的
launch.json
文件window.
- 如下所示添加
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 中,它在每个会话中被清除并重新使用,而不是在每个会话中生成一个新的集成终端。
缺点
我最终返回到集成终端以获取需要用户在控制台输入的脚本,因为调试控制台不允许用户输入。
在那种情况下,您只需要不断删除额外的调试会话 - 有点痛苦。
在 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.
真正的解决方案:让终端在之后退出!
终于找到了一个真正的解决方案(好吧,有点老套),
如果您在调试配置中添加参数 &&
和 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 配置来执行此操作:
- 转到边栏中的“运行”window
- Select下拉菜单中的运行配置然后按齿轮,会在编辑器中调出对应的
launch.json
文件window.
- 如下所示添加
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 中,它在每个会话中被清除并重新使用,而不是在每个会话中生成一个新的集成终端。
缺点
我最终返回到集成终端以获取需要用户在控制台输入的脚本,因为调试控制台不允许用户输入。
在那种情况下,您只需要不断删除额外的调试会话 - 有点痛苦。