排查终端启动故障

首先,很抱歉您在阅读本文档,而不是在愉快地使用 Visual Studio Code 的集成终端。VS Code 团队致力于使终端体验尽可能顺畅,但在某些情况下,Shell 或终端配置存在的问题是 VS Code 编辑器无法规避的。

在帮助数百名开发者诊断其终端启动故障后,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 文件中修改。您可以通过设置编辑器中的 在 settings.json 中编辑 链接,或通过命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中的 首选项:打开用户设置 (JSON) 命令来打开 settings.json

    A user's settings.json file

  2. 直接测试您的 Shell。 尝试在 VS Code 之外的外部终端或命令提示符中运行指定的集成终端 Shell。某些终端启动故障可能是由 Shell 安装本身导致的,并非 VS Code 特有。显示的退出代码来自 Shell,您可以通过在互联网上搜索特定 Shell 和退出代码来诊断 Shell 问题。

  3. 使用最新版本的 VS Code。 每个 VS Code 每周发布版都有许多更新和修复,可能包含集成终端的改进。您可以通过 帮助 > 关于(macOS 上为 Code > 关于 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 本身的问题。
  • 如果终端是由扩展启动的,请通过打开问题报告器(帮助 > 报告问题)并将“文件所属 (File On)”设置为“扩展 (An Extension)”来向该扩展报告问题。
  • 如果您认为这是 VS Code 的 Bug,请使用问题报告器(帮助 > 报告问题)报告该问题。问题报告器会自动填充相关信息,请参阅创建优秀的终端问题报告以了解还需要在报告中包含哪些内容。
  • 如果您使用的是 Windows 10 1809(内部版本 17763)或更低版本,该问题与旧版 "winpty" 后端有关。升级到 Windows 1903(内部版本 18362)可迁移至微软构建的全新 "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(默认 Shell 为 WSL)

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

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

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

发生本机异常

通常,此错误是由于杀毒软件拦截并阻止了 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,右键点击标题栏,转到 属性,在 选项 选项卡下,取消勾选 使用旧版控制台

Use legacy mode checkbox

后续步骤

© . This site is unofficial and not affiliated with Microsoft.