【问题标题】:VSCode change debug console name automaticallyVSCode 自动更改调试控制台名称
【发布时间】:2021-08-18 01:35:57
【问题描述】:

当我使用 VSCode 调试器执行我的代码时,会打开名为 Python Debug Console 的新控制台

我可以通过右键单击来手动更改控制台的名称

有没有办法编辑launch.json 文件以自动更改控制台名称?

谢谢!

编辑:

此功能目前不可用,我已经打开了一个问题 here

【问题讨论】:

  • 感谢您的赏金,您成功了吗?我很难解释如何去做,我想了想,因为它真的没那么难。我可以在我的 github 上创建一个项目,它已经在运行,所以如果你愿意,你可以看看如何去做。但我猜自从我收集了赏金后,你就明白了。
  • 您还可以更改控制台图标,因此在调试时它会显示一个错误,而不是控制台图标。事实上,有一个带有错误的控制台图标,您可以使用它。无论如何,在你问起之前,我从来没想过要这样做。

标签: python visual-studio-code


【解决方案1】:

获取动态 VS-Code 控制台名称


这可能被一些人认为是 VSCode 支持的更高级的配置之一。将您要求的功能添加到 _V.S.代码 将需要使用任务、输入、launch.json 钩子和带参数的 VSCode 命令。它的工作量比听起来要少,我为您编写了代码,这样应该会有所帮助。它需要你读一些东西,同样我也需要写一些东西——“开始吧!”



V.S.代码目录


您需要做的第一件事是打开一个可以在其中使用调试器的项目,以便测试您构建的任务。我打印了一个文件树,然后复制并粘贴此摘录下方的树。树很简单,但简洁明了。确保您的 .vscode 目录像文件树一样设置,其中包括您的 launch.jsonsettings.jsontasks.json 配置文件。




旁注:我们不会在 settings.json 文件中做任何事情,我只是想表明可以在您的目录中包含它。
        . 
        |
        └── .vscode
            ├── launch.json
            ├── settings.json
            └── tasks.json        


让一切成为可能的命令:workbench.action.terminal.rename


在后台,workbench.action.terminal.rename 与右键单击控制台名称以重命名控制台没有什么不同,就像您在发布的照片​​中展示的那样。



创建任务


现在打开"./.vscode/tasks.json" 文件;看下面这段摘录,你会看到一个受保护的代码块,这是给你想要的任务配置:“当调试器运行时会改变的动态控制台名称。”你应该花点时间仔细看一下,它非常直接且易于理解。闲暇时将下面的 JSON 代码复制并粘贴到您的 tasks.json 文件中。


将以下代码添加到您的 "./.vscode/tasks.json" 文件中

    /__ @file ".../.vscode/tasks.json"  */


    {
        "version": "2.0.0", /* MAKE SURE THIS LINE IS EXACTLY THE SAME */

        // TASK DEFINITIONS
        "tasks": [
            {
                /* TASK_#1 */
                "label": "task|renameConsolePre",
                "command": "${input:renameConsolePre}"
            },
            {
                /* TASK_#2 */
                "label": "task|renameConsolePost",
                "command": "${input:renameConsolePost}"
            }
        ],

        // |> INPUT DEFINITIONS
        "inputs": [
            {
                /* INPUT FOR TASK_#1 */
                "id": "renameConsolePre",
                "type": "command",
                "command": "workbench.action.terminal.renameWithArg",
                "args": {
                    /* NAME OF CONSOLE WHEN DEBUGGER IS ACTIVE */
                    "name": "Debugging Console" 
                }
            },
            {        
                /* INPUT FOR TASK_#2 */
                "id": "renameConsolePost",
                "type": "command",
                "command": "workbench.action.terminal.renameWithArg",
                "args": {
                    /* NAME OF CONSOLE WHEN DEBUGGER IS INACTIVE */
                    "name": "BASH" 
                }
            }
        ]
    }



上面的 JSON 文件的 sn-p 中有很多东西,可以讨论并详细介绍,但是,为了时间的缘故,我会指出,我的感觉是从那个sn-p中获取最重要的。显然我还没有谈到inputs,现在可能是提及它们的最佳时机。

"inputs":[] 数组的全部目的是有一个可以定义变量引用的地方。因为您想向 vscode 添加动态,您将需要使用参数,如果没有输入,您将无法实现您在任务中使用的命令,因为您无法将参数传递给它。 (页面底部是变量引用的链接,您应该检查一下)。




这是测试你的任务的好点

要测试您在 "./.vscode/tasks.json" 文件中的任务是否正常工作,您需要打开您的 keybindings.json 文件。


  • 按下 [F1] 键。 快速菜单应该打开。
  • 快捷菜单中输入: “键盘快捷键”
  • 快捷菜单应为您提供 2 种不同 键盘快捷键供您选择。选择默认的那个。
  • 现在您应该在 ~/.config/Code/User/keybindings.json 文件中。

如果您编写自己的键绑定,则可能不需要阅读上述说明,并且您可能已经在您的 keybindings.json 文件。如果您没有定义自己的键绑定,则该文件可能为空。

如果您定义自己的键绑定,请创建这样的键绑定,并将其分配给您选择的键。
    {
        "key": "",
        "command": "workbench.action.tasks.runTask",
        "args": "task|renameConsolePre",
        "when": ""
    },
  


如果您从未在 keybindings.json 文件中添加键绑定,则将以下内容添加到文件中,并确保包含整个 code-sn-p 的数组括号位于底部文件中的最级别块。 keybindings.json

file 采用一个数组,而不是您在 JSON 文件中看到的典型对象。

    [
        {
            "key": "ctrl+shift+space ctrl+shift+space",
            "command": "workbench.action.tasks.runTask",
            "args": "task|renameConsolePre",
            "when": ""
        },
    ]
  

使用键绑定

[CTRL]+[SHIFT] & 按住两个键的同时按两次空格键 - 背靠背

实际的键绑定如下所示:[ctrl]+[shift]+[space] [ctrl]+[shift]+[space]


如果您正确地创建了键绑定,并且您将来自上述 sn-p 的代码的文件内容粘贴到位于正确目录中的正确文件中,那么键绑定应该会触发控制台的名称改变。如果名字没有改变,你做错了什么。测试您的任务是否以这种方式工作的优势在于,每次您想要测试您的任务时,它都比启动调试器要好得多。这通常被认为是解决和调试为编辑器创建的任务的更好方法之一。


启动点 JSON 配置

{
    "configurations": [
        {
            "args": ["--extensionDevelopmentPath=${workspaceFolder}"],
            "name": "Launch Extension",
            "outFiles": ["${workspaceFolder}/out/**/*.js"],
            "request": "launch",
            "type": "pwa-extensionHost",

            /* "Pre-hook is assigned TASK #1" */   
            "preLaunchTask": "task|renameConsolePre",

            /* "Post-Hook is assigned TASK #2" */ 
            "postDebugTask": "task|renameConsolePost"
        }
    ]
}

好的,所以我不能配置launch.json 文件来调试你的程序,因为我不知道你调试的是什么程序/语言,但是钩子应该都是一样的。

这里是钩子的名称和定义。这是code.visualstudio.com Documentation Definition of the preLaunch properties (hooks)


  • preLaunchTask - 要在调试会话开始之前启动任务,请将此属性设置为 tasks.json 中指定的任务的标签(在工作区的 .vscode 文件夹中)。或者,这可以设置为 $

  • postDebugTask - 要在调试会话结束时启动任务,请将此属性设置为 tasks.json 中指定的任务名称(在工作空间的 .vscode 文件夹中)。


现在,如果您需要更多帮助,可以问我,我喜欢这种转换,所以请随意。如果可能的话,我们自己解决问题总是好的,所以如果你遇到困难,可以尝试以下参考:



我在答案的不同部分都有链接,但我决定将所有链接放在一个地方,以便在需要参考时很容易找到返回其中一个链接。前两个链接是来自同一基本 URL 的锚点,当您在配置 launch.json 文件时遇到问题时非常有用。不仅出于此问题/答案的目的,而且它们总体上很有帮助。




“下面的链接显示了正确的 launch.json 配置的示例和演示”

VSCode Docs: launch-configurations

(AT) - https://code.visualstudio.com/docs/editor/debugging#_launch-configurations



“这是迄今为止列表中最好的资源,因为它确实详细介绍了每个 launch.json 属性。(非常有帮助!)

launch.json Attributes

(AT) - https://code.visualstudio.com/Docs/editor/debugging#_launchjson-attributes



“此链接涵盖了输入,以及当调试器启动时等事件调用命令时如何将参数传递给命令,并且您使用挂钩来调用您的代码。)” em>

Inputs, and how Inputs in Tasks Work

(AT) - https://code.visualstudio.com/docs/editor/variables-reference



【讨论】:

  • 我知道,我必须编辑这个。我花了很长时间来写,但这是解决方案,据我所知,他们没有其他指南可以做到这一点,或者你会得到一个指向该指南的链接,而不是大声笑。我睡觉了,然后醒来编辑。
  • 令人印象深刻的答案,键绑定就像一个魅力!我正在使用 GUI 启动调试配置,当单击“开始调试”时,它会启动一个新控制台。 preLaunchTask 未正确检测到此新控制台。最终没有重命名调试控制台,或者重命名打开的控制台(如果存在)。从控制台退出调试器时,正确的控制台将根据postDebugTask 重命名。你知道如何解决这个问题吗?我的猜测是 preLaunchTask 在创建新控制台之前被调用。
  • launch.json 可能有帮助的设置之一是:"console": "internalConsole"。这是涵盖 launch.json console 属性的文档的链接。 code.visualstudio.com/docs/python/debugging#_console
  • @AlonBarad 太棒了阿隆!我希望你不介意,但我在这件事上给出了我的两个意义。我觉得应该通过 "postLaunch" 钩子来实现,但这只是我。这是你提出的一个绝妙的主意。
猜你喜欢
  • 2017-06-02
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 2021-02-17
相关资源
最近更新 更多