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 下找到。