疑難排解終端機啟動失敗

首先,我們很遺憾您需要閱讀這份文件,而不是享受使用 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 檔案中修改。您可以透過設定編輯器中的在 settings.json 中編輯連結開啟 settings.json,或是使用命令選擇區(⇧⌘P (Windows, Linux Ctrl+Shift+P))中的 喜好設定:開啟使用者設定 (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. 啟用追蹤記錄。 您可以啟用追蹤記錄 (trace logging),並在啟動終端機時擷取記錄。記錄檔通常會揭露問題所在,因為所有用於建立終端機程序/pty 的參數都會被記錄下來。錯誤的 Shell 名稱、參數或環境變數都可能導致終端機無法啟動。如果問題未解決,請保留此記錄以備後用。

額外疑難排解步驟

如果上述步驟皆無法解決問題,您也可以嘗試:

  • Stack Overflow 上詢問。啟動問題通常與環境設定有關,而非 VS Code 本身的問題。
  • 如果終端機是由擴充功能啟動的,請透過問題回報工具(說明 > 回報問題)回報給該擴充功能,並將「檔案來源 (File On)」設定為「一個擴充功能 (An Extension)」。
  • 如果您認為這是 VS Code 的錯誤,請使用問題回報工具(說明 > 回報問題)進行回報。問題回報工具會自動填入相關資訊,請參閱建立優質的終端機問題回報 (Creating great terminal issues),了解報告中還需要包含哪些資訊。
  • 如果您使用 Windows 10 1809 (組建 17763) 或更低版本,該問題與舊版的「winpty」後端有關。升級至 Windows 1903 (組建 18362) 將會讓您切換至由 Microsoft 建置的全新「conpty」後端,這可能可以修正您的問題。
  • 如果您的終端機設定為「僅以系統管理員身分執行」,而您啟動 VS Code 時並未以系統管理員身分執行,終端機將無法開啟。您可以變更預設終端機,或是編輯終端機執行檔的內容,取消其系統管理員身分執行設定。

結束代碼

終端機啟動失敗通知中顯示的結束代碼是 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)

如果 Linux 的 Windows 子系統 (WSL) 未設定有效的預設 Linux 發行版,就可能會發生此錯誤。

注意: 'docker-desktop-data' 並非有效的發行版。

  • 開啟 PowerShell 並輸入 wslconfig.exe /l,以確認 WSL 安裝正確,並列出系統中目前可用的 Linux 發行版。確認有效的發行版旁邊標示有 (預設)
  • 若要變更預設發行版,請輸入 wslconfig.exe /setdefault "清單中顯示的發行版名稱"

發生原生例外狀況 (A native exception occurred)

此錯誤通常是因為防毒軟體攔截並阻止 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 結束

當終端機嘗試啟動新程序(例如 PowerShell.exe)時,結束代碼 259 可能代表 STILL_ACTIVE。您可以試著終止機器上未使用的程式與程序,因為其中之一可能導致終端機 Shell 程序處於活動狀態而無法重新啟動。

機器上執行的防毒軟體也可能干擾終端機 Shell 的啟動。

終端機以代碼 3221225786(或類似代碼)結束

當您在 conhost 的內容中啟用「舊版主控台模式」時,可能會發生這種情況。若要變更此設定,請從「開始」功能表開啟 cmd.exe,在標題列按一下右鍵,前往 內容,並在 選項 索引標籤下取消勾選 使用舊版主控台

Use legacy mode checkbox

後續步驟

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