Gopls: Устранение неполадок
Если вы подозреваете, что gopls вылетает или работает некорректно, пожалуйста, следуйте нижеприведённым шагам устранения неполадок.
Если gopls использует слишком много памяти, пожалуйста, следуйте инструкциям в разделе Использование памяти.
Шаги
Пользователи VS Code должны следовать их руководству по устранению неполадок, которое содержит более специфичную версию этих инструкций.
- Убедитесь, что ваш проект находится в рабочем состоянии, работая с ним вне редактора. Запуск команды вроде
go build ./...в директории рабочей области скомпилирует всё. Для модулей,go mod tidyтакже является хорошей проверкой, хотя она может изменить вашgo.mod. - Проверьте, чтобы редактор не показывал диагностические сообщения, указывающие на проблему с вашей рабочей областью. Они могут появляться как диагностические сообщения в объявлении пакета Go-файла, диагностические сообщения в файле go.mod или как сообщения о статусе или прогрессе. Проблемы в конфигурации рабочей области могут вызывать множество различных симптомов. См. инструкции по настройке рабочей области для получения помощи.
- Убедитесь, что
goplsявляется актуальной версии, следуя инструкциям по установке, а затем перезапустите gopls. - По желанию, запросите помощь в Gophers Slack.
- Наконец, сообщите о проблеме разработчикам
gopls.
Перезапуск gopls
gopls не имеет постоянного состояния, поэтому перезапуск решит временные проблемы. Это хорошо и плохо: хорошо, потому что вы сможете продолжать работать, и плохо, потому что вы не сможете отладить проблему до её повторного возникновения.
В большинстве случаев закрытие всех открытых редакторов гарантирует, что gopls будет завершён и перезапущен. Если вы не хотите делать это, возможно, существует команда редактора, которую можно использовать для перезапуска только gopls. Обратите внимание, что некоторые конфигурации vim сохраняют сервер активным некоторое время после выхода из редактора; возможно, вам потребуется явно завершить gopls, если вы используете vim.
Запрос помощи
Gophers Slack имеет активные каналы, специфичные для редакторов, такие как #emacs, #vim и #vscode, которые могут помочь в дальнейшей отладке. Если вы уверены, что проблема связана с gopls, вы можете сразу перейти в канал #gopls. Приглашения доступны для всех. Подготовьтесь к краткому описанию проблемы и постарайтесь быть доступным для ответов на вопросы в течение некоторого времени после этого.
Сообщить о проблеме
Мы не можем диагностировать проблему только по описанию. При создании задачи, пожалуйста, включите как можно больше следующей информации:
- Ваш редактор и все настройки, которые вы настроили (например, ваш файл
settings.jsonв VSCode). - Пример программы, воспроизводящей проблему, если это возможно.
- Вывод команды
gopls versionв командной строке. - Полный лог-файл gopls из сессии, в которой возникла проблема. В нем должна быть строка лога
go env for <workspace folder>в начале. Также полезно указать время возникновения проблемы, чтобы мы могли найти её в логе. См. инструкции по тому, как захватывать логи gopls.
Ваш редактор может иметь команду, которая автоматически заполняет часть необходимой информации, например, :GoReportGitHubIssue в vim-go. В противном случае, можно использовать команду gopls bug в командной строке. Если ни одна из этих команд не работает, вы можете создать задачу вручную на трекере задач Go.
Захват логов
Возможно, потребуется изменить конфигурацию вашего редактора, чтобы передать флаг -logfile в gopls.
Чтобы увеличить уровень детализации логов, запустите gopls с флагом -rpc.trace. Чтобы запустить debug-сервер, который позволит просматривать профили и использование памяти, запустите gopls с командой serve --debug=localhost:6060. После этого вы сможете просматривать отладочную информацию, перейдя по адресу localhost:6060.
Если вы не уверены, как передать флаг в gopls через ваш редактор, пожалуйста, обратитесь к документации для вашего редактора.
Отладка использования памяти
gopls автоматически записывает отладочную информацию о памяти, когда использование превышает 1 ГБ. Эта информация может быть найдена в вашей временной директории с именами вроде gopls.1234-5GiB-withnames.zip. В Windows временная директория будет находиться по пути %TMP%, а в Unix-подобных системах — в $TMPDIR, который обычно равен /tmp. Пожалуйста, сообщите о проблеме, приложив эту отладочную информацию о памяти. Если вы не хотите раскрывать названия пакетов вашего кода, вы можете поделиться zip-архивом с флагом -nonames, но он будет гораздо менее полезен.
Исходные файлы этой документации находятся в golang.org/x/tools/gopls/doc.