Gopls:故障排除

如果您懷疑 gopls 正在崩潰或無法正常工作,請按照以下故障排除步驟進行操作。

如果 gopls 使用了過多的記憶體,請按照 記憶體使用量 部分的步驟進行操作。

步驟

VS Code 使用者應遵循 他們的故障排除指南,其中包含這些說明的更具體版本。

  1. 透過在編輯器外部使用您的專案來驗證您的專案是否狀態良好。在工作區目錄中執行 go build ./... 類似的命令將編譯所有內容。對於模組,go mod tidy 是另一個不錯的檢查,儘管它可能會修改您的 go.mod
  2. 檢查您的編輯器是否未顯示任何表明您的工作區存在問題的診斷資訊。它們可能顯示為 Go 檔案包宣告上的診斷資訊、go.mod 檔案中的診斷資訊,或者作為狀態或進度訊息。工作區配置中的問題會導致多種不同的症狀。有關幫助,請參閱 工作區設定說明
  3. 確保 gopls 是最新的,方法是遵循 安裝說明,然後 重新啟動 gopls
  4. 或者,可以在 Gophers Slack 上 尋求幫助
  5. 最後,請 gopls 開發人員報告問題

重新啟動 gopls

gopls 沒有持久狀態,因此重新啟動它可以解決暫時性問題。這是好壞參半:好,因為您可以繼續工作;壞,因為在問題再次發生之前您將無法對其進行除錯。

在大多數情況下,關閉所有開啟的編輯器將確保 gopls 被終止並重新啟動。如果您不想這樣做,可能有編輯器命令可以僅重新啟動 gopls。請注意,某些 vim 配置會在編輯器退出後一段時間內保持伺服器執行;如果您使用 vim,則可能需要顯式終止 gopls

尋求幫助

Gophers Slack 具有活躍的特定於編輯器的頻道,例如 #emacs#vim#vscode,它們可以幫助進一步除錯。如果您確信問題出在 gopls 上,您可以直接進入 #gopls。邀請 對所有人開放。準備好簡短的問題描述,並儘量在事後一段時間內方便接聽問題。

提交問題

我們無法僅憑描述來診斷問題。提交問題時,請儘可能包含以下資訊:

  1. 您的編輯器以及您配置的任何設定(例如,您的 VSCode settings.json 檔案)。
  2. 如果可能,一個重現問題的示例程式。
  3. 命令列上 gopls version 的輸出。
  4. 發生問題的會話中完整的 gopls 日誌檔案。它應在開頭附近包含 go env for <workspace folder> 的日誌行。還應告知我們問題發生的時間戳,以便我們可以在日誌中找到它。有關如何捕獲 gopls 日誌的資訊,請參閱 說明

您的編輯器可能有一個命令可以填充一些必要的資訊,例如 vim-go 中的 :GoReportGitHubIssue。否則,您可以在命令列上使用 gopls bug。如果兩者都無效,您可以直接在 Go 問題跟蹤器上從頭開始。

捕獲日誌

您可能需要更改編輯器的配置,以便將 -logfile 標誌傳遞給 gopls。

要增加日誌的詳細程度,請使用 -rpc.trace 標誌啟動 gopls。要啟動一個除錯伺服器,讓您可以檢視配置檔案和記憶體使用情況,請使用 serve --debug=localhost:6060 啟動 gopls。然後,您可以透過導航到 localhost:6060 來檢視除錯資訊。

如果您不確定如何透過編輯器將標誌傳遞給 gopls,請參閱 您的編輯器文件

除錯記憶體使用量

當您的使用量超過 1GB 時,gopls 會自動輸出記憶體除錯資訊。這些資訊可以在您的臨時目錄中找到,名稱類似於 gopls.1234-5GiB-withnames.zip。在 Windows 上,您的臨時目錄位於 %TMP%,在 Unix 系統上,它位於 $TMPDIR,通常是 /tmp。請 提交一個問題,並附上此記憶體除錯資訊。如果您不願意共享程式碼的包名稱,則可以共享 -nonames zip 檔案,但這效果會差很多。


本文件的原始碼可以在 golang.org/x/tools/gopls/doc 下找到。