Удаленная отладка GoLand показывает "не удалось найти <file>" - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь отладить однофайловое приложение Go, работающее в док-контейнере, использующее delve в контейнере и использующее GoLand на ноутбуке Mac.

Когда я запускаю локальный отладчик, мои точки остановаРабота.Когда я использую конфигурацию «Go Remote», все мои точки останова превращаются в косую черту, и в записке говорится «не удалось найти FILENAME».

Я убедился, что мои исходные файлы находятся по тому же относительному пути кGOPATH как на сервере (контейнере), так и на клиенте.

Я использую Go 1.12.5 в контейнере, с помощью этой команды delve: dlv debug --headless --listen=:8044 --api-version=2 --accept-multiclient

Он правильно строит мой src/github.com/flinkt/reverseProxy/reverseProxy.go to bin/reverseProxy и начинает вывод ожидаемых сообщений при получении ожидаемых http-запросов.

Моя сборка GoLand - 2019.1.Конфигурация обращается к localhost 8043 и не имеет других заполненных полей.

Контейнер Docker монтирует исходный код, так что я уверен, что они смотрят на те же самые исходные файлы.

Конфигурация проекта имеет корневой каталог содержимого прямо над каталогами src/ и bin/, и он также устанавливается как проект GOPATH.Глобальной GOPATH не существует, и все зависимости находятся в дереве src/.Флажок для индексирования всего отмечен.

Предложения о том, почему моя IDE не видит мой источник или не останавливается на моих точках останова?

1 Ответ

0 голосов
/ 03 июля 2019

Я сталкиваюсь с такой же ситуацией, как и вы.

Вот мой сценарий:

  • сборка идет двоично на удаленной машине, но вне GOPATH dir (Use Go Module).
  • работает в док-контейнере, используя delve на хост-машине, напрямую подключается к pid док-контейнера.

dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient attach $PID

  • локальный исходный кодпод GOPATH, используя GoLand на ноутбуке Mac, подключайтесь к удаленному серверу Delve.
  • Я могу видеть информацию о Goroutine, но точки останова не работают, говорит "не удалось найти XXX".

Решение:

go modules

Включите «Интеграция Go Modules» в настройках Goland, и это работает!


Возможно, я использую Go Module при сборке, и Goland самостоятельно реализует клиент delve, поэтому мне следует включить интеграцию Goland Go Module, чтобы позволить Goland правильно обрабатывать путь к исходному коду.

Goland: 2019.1.3, delve: 1.2.0, Go: 1.12.4

Надеюсь, это поможет вам.

...