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 というログ行があるはずです。問題をログ内で見つけられるように、問題が発生したタイムスタンプを教えていただくことも役立ちます。gopls ログの取得方法については、手順を参照してください。

エディタには、vim-go:GoReportGitHubIssue のように、必要な情報の一部を記入するコマンドがある場合があります。そうでない場合は、コマンドラインで gopls bug を使用できます。どちらも機能しない場合は、Go イシュートラッカーで最初から直接開始できます。

ログの取得

エディタの設定を変更して、gopls に -logfile フラグを渡す必要がある場合があります。

ログの詳細レベルを上げるには、-rpc.trace フラグを付けて gopls を開始します。プロファイルとメモリ使用量を確認できるデバッグサーバーを開始するには、serve --debug=localhost:6060 を付けて gopls を開始します。その後、localhost:6060 にアクセスしてデバッグ情報を表示できます。

エディタを介して gopls にフラグを渡す方法が不明な場合は、エディタのドキュメントを参照してください。

メモリ使用量のデバッグ

gopls は、使用量が 1GB を超えると自動的にメモリデバッグ情報を書き出します。この情報は、gopls.1234-5GiB-withnames.zip のような名前で一時ディレクトリにあります。Windows では一時ディレクトリは %TMP% にあり、Unix 系では $TMPDIR (通常は /tmp) です。このメモリデバッグ情報を添付して問題を報告してください。コードのパッケージ名を共有することに抵抗がある場合は、代わりに -nonames zip を共有できますが、有用性ははるかに低くなります。


このドキュメントのソースファイルは、golang.org/x/tools/gopls/doc の下にあります。