排查终端启动失败问题

首先,我们想说很抱歉您在这里阅读这篇文档,而不是在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} - The default shell profile that the terminal uses.
    • terminal.integrated.profiles.{platform} - The defined shell profiles. Sets the shell path and arguments.
    • terminal.integrated.cwd - The current working directory (cwd) for the shell process.
    • terminal.integrated.env.{platform} - Environment variables that are added to the shell process.
    • terminal.integrated.inheritEnv - Whether new shells should inherit their environment from VS Code.
    • terminal.integrated.automationProfile.{platform} - Shell profile for automation-related terminal usage like tasks and debug.
    • terminal.integrated.splitCwd - Controls the current working directory a split terminal starts with.
    • terminal.integrated.windowsEnableConpty - Whether to use ConPTY for Windows terminal process communication.

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

    搜索集成终端设置

    快速检查您是否更改了可能未注意到的设置的方法是使用设置编辑器中的@modified过滤器。

    筛选修改过的设置

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

    用户的settings.json文件

  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上以代码1退出(使用WSL作为默认shell)

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

注意: 'docker-desktop-data' 不是一个有效的发行版。

  • 打开 PowerShell 并输入 wslconfig.exe /l 以确认 WSL 已正确安装,并列出系统中当前可用的 Linux 发行版。确认有效的发行版旁边有 (默认)
  • 要更改默认发行版,请输入 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 可能意味着 STILL_ACTIVE,当终端尝试启动一个新进程(如 PowerShell.exe)时。你可以尝试终止机器上未使用的程序和进程,以防其中一个保持终端 shell 进程活动并无法重新启动。

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

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

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

使用传统模式复选框

下一步