现已推出!阅读 10 月份的新功能和修复。

排查终端启动失败

首先,我们想说很抱歉您在这里阅读本文档而不是享受使用 Visual Studio Code 中的集成终端。VS Code 团队致力于使终端体验尽可能无缝,但在某些情况下,存在 VS Code 编辑器无法解决的 shell 或终端配置问题。

在与数百位开发人员合作诊断他们的终端启动失败后,VS Code 团队整理了这篇文章,其中包含了过去帮助过人们的建议和故障排除技巧。我们希望您能在这里找到 shell 或终端问题的答案,并能快速返回工作。

集成终端用户指南

如果您不熟悉使用 VS Code 集成终端,可以在 集成终端 用户指南中了解更多信息。您可以在其中了解如何 配置 终端,并查看对 常见问题 的解答。

以下是具体的故障排除步骤,如果您使用指南后仍然无法诊断启动失败问题。故障排除步骤(例如检查您的设置和启用日志记录)适用于支持 VS Code 的所有平台;macOS、Linux 和 Windows。

注意:如果您使用的是 Windows,您可能需要先查看 Windows 上的常见问题 部分。

故障排除步骤

要排查 Visual Studio Code 中的集成终端启动失败,请按照以下步骤诊断问题。

  1. 检查您的用户设置。查看这些 terminal.integrated 设置,这些设置可能会影响启动。

    • terminal.integrated.defaultProfile.{platform} - 终端使用的默认 shell 配置文件。
    • terminal.integrated.profiles.{platform} - 定义的 shell 配置文件。设置 shell 路径和参数。
    • terminal.integrated.cwd - shell 进程的当前工作目录 (cwd)。
    • terminal.integrated.env.{platform} - 添加到 shell 进程的环境变量。
    • terminal.integrated.inheritEnv - 新的 shell 是否应该从 VS Code 继承其环境。
    • terminal.integrated.automationProfile.{platform} - 用于自动相关的终端使用(如任务和调试)的 shell 配置文件。
    • terminal.integrated.splitCwd - 控制分割终端启动时使用的当前工作目录。
    • terminal.integrated.windowsEnableConpty - 是否对 Windows 终端进程通信使用 ConPTY。

    您可以在设置编辑器中查看设置(文件 > 首选项 > 设置),并按设置 ID 搜索特定设置。

    Search for Integrated terminal settings

    检查您可能不知情地更改了哪些设置的快速方法是在设置编辑器中使用 @modified 过滤器。

    Filter for modified settings

    大多数集成终端设置需要在用户 settings.json JSON 文件中直接修改。您可以通过设置编辑器中的 在 settings.json 中编辑 链接打开 settings.json,或者使用命令面板中的 首选项:打开用户设置 (JSON) 命令(⇧⌘P(Windows、Linux Ctrl+Shift+P)。

    A user's settings.json file

  2. 直接测试您的 shell。尝试从 VS Code 之外的外部终端或命令提示符运行您指定的集成终端 shell。某些终端启动失败可能是由于您的 shell 安装所致,与 VS Code 无关。显示的退出代码来自 shell,您可以通过在互联网上搜索特定 shell 和退出代码来诊断 shell 问题。

  3. 使用最新版本的 VS Code。每个 VS Code 月度版本都有许多更新和修复,可能包括集成终端改进。您可以通过 帮助 > 关于(在 macOS 上,代码 > 关于 Visual Studio Code)查看您的 VS Code 版本。要查找 VS Code 的最新版本,请访问 VS Code 发行说明。您可能还需要检查您是否安装了最新版本的 shell。

  4. 使用最新版本的 shell。如果您的 shell 是独立于您的平台安装的,请尝试安装最新版本的 shell。如果您使用的是旧的操作系统版本,则同样适用。例如,某些旧版本的 Windows 10 与 VS Code 终端配合使用时效果不佳。

  5. 启用跟踪日志记录。您可以启用 跟踪日志记录 并在启动终端时捕获日志。日志记录通常会显示问题所在,因为用于创建终端进程/pty 的所有参数都会被记录。错误的 shell 名称、参数或环境变量会导致终端无法启动。如果您的问题没有解决,请保留此日志以备后用。

其他故障排除步骤

如果这些步骤都无法解决问题,您还可以尝试

  • Stack Overflow 上询问,启动问题通常与环境设置有关,而不是 VS Code 的问题。
  • 如果终端是由扩展启动的,请通过打开问题报告器(帮助 > 报告问题)并将文件设置为“扩展”,向扩展报告问题。
  • 如果您认为是 VS Code 的错误,请使用问题报告器(帮助 > 报告问题)报告问题。问题报告器会自动填写相关信息,请查看 创建出色的终端问题,了解在报告中还需要包含哪些内容。
  • 如果您使用的是 Windows 10 1809(版本 17763)或更低版本,问题可能与旧版“winpty”后端有关。升级到 Windows 1903(版本 18362)将使用 Microsoft 构建的新“conpty”后端,这可能会解决您的问题。
  • 如果您的终端设置为仅以管理员身份运行,而您没有以管理员身份启动 VS Code,则终端将无法打开。您可以更改默认终端或编辑终端 exe 的属性以不以管理员身份运行。

退出代码

终端启动失败通知中显示的退出代码由 shell 进程返回,而不是由 VS Code 生成。终端可以使用许多可用的 shell,并且可能有数百种可能的退出代码。

  • 尝试在互联网上搜索您的特定 shell 和退出代码(例如,“PowerShell 4294901760”),您可能会找到与终端启动失败相关的特定建议或已知问题。
  • 尝试在 shell 的问题存储库中搜索。例如,如果您在使用 WSL 时遇到问题,您可能会在 https://github.com/microsoft/WSL/issues 上的已打开或已解决的问题中找到解决方法。

Windows 上的常见问题

确保已禁用兼容模式

升级到 Windows 10 后,某些应用程序可能会自动开启兼容模式。如果为 VS Code 启用了兼容模式,终端将出现故障,因为它会执行一些低级操作来启用其使用的仿真。您可以通过右键单击 VS Code 可执行文件、选择**属性**,然后在**兼容性**选项卡中取消选中**以兼容模式运行此程序**选项来检查和禁用兼容模式。

终端在 Windows 10(使用 WSL 作为默认 shell)上以代码 1 退出

如果 Windows Subsystem for Linux (WSL) 未设置有效的默认 Linux 发行版,则可能会发生此错误。

注意:“docker-desktop-data”不是有效的发行版。

  • 打开 PowerShell 并输入 wslconfig.exe /l 以确认 WSL 已正确安装并列出系统中当前可用的 Linux 发行版。确认有效的发行版旁边有(default)
  • 要更改默认发行版,请输入 wslconfig.exe /setdefault "distributionNameAsShownInList"

发生了本机异常

通常,此错误是由于反病毒软件拦截并阻止 winpty/conpty 组件创建终端进程造成的。要解决此错误,您可以将以下文件从反病毒扫描中排除

{install_path}\resources\app\node_modules.asar.unpacked\node-pty\build\Release\winpty.dll
{install_path}\resources\app\node_modules.asar.unpacked\node-pty\build\Release\winpty-agent.exe
{install_path}\resources\app\node_modules.asar.unpacked\node-pty\build\Release\conpty.node
{install_path}\resources\app\node_modules.asar.unpacked\node-pty\build\Release\conpty_console_list.node

将此问题报告给反病毒团队也可以帮助彻底解决问题。

终端以代码 259 退出

退出代码259可能意味着当终端尝试启动新进程(例如 PowerShell.exe)时,STILL_ACTIVE。您可以尝试终止机器上未使用的程序和进程,以防其中一个程序使终端 shell 进程保持活动状态并无法重新启动。

机器上运行的反病毒软件也可能会干扰终端 shell 的启动。

终端以代码 3221225786(或类似代码)退出

当您在 conhost 的属性中启用旧版控制台模式时,可能会发生这种情况。要更改此设置,请从开始菜单打开 cmd.exe,右键单击标题栏,转到**属性**,然后在**选项**选项卡下取消选中**使用旧版控制台**。

Use legacy mode checkbox

后续步骤