отладка приложения Go не останавливается на точках останова

У меня есть последняя версия IntelliJ Ultimate EAP и последняя версия Gogland, и проблема возникает как на MacOS Sierra.

Я пытаюсь отладить приложение go, создав профиль отладки для Go Application, а Run Kind настроен на Package, который содержит имя пакета текущего проекта.

под Go tool arguments у меня настроено -ldflags="-linkmode internal".

Когда я запускаю сеанс отладки, имея несколько точек останова, он запускается, но не останавливается на этих точках останова.

что мне не хватает?

Благодарность

Обновить

хорошо, я смог воспроизвести проблему со следующим проектом:

test1.go содержит:

package main

const Numb uint64 = 5

test2.go содержит:

package main

import "fmt"

func main() {
    fmt.Println(Numb);
}

Я создал Go Application конфигурацию запуска / отладки со следующими параметрами:

Run kind: package
Package: github.com/kfirufk/test
Working Directory: /usr/local/Cellar/go/1.8.1/src/github.com/kfirufk/test/

когда я выбираю точку останова в test2.go строке 6 (первая и единственная строка кода в основной функции) и запускаю сеанс отладки, я вижу следующий результат:

"/Users/ufk/Library/Application Support/IntelliJIdea2017.1/Go/lib/dlv/mac/dlv" --listen=localhost:53111 --headless=true exec /private/var/folders/cn/n7rwdd_95_l54s3zdnbxvw040000gn/T/Unnamedgo --
GOROOT=/usr/local/Cellar/go/1.8.1/libexec
GOPATH=/usr/local/opt/go
/usr/local/Cellar/go/1.8.1/libexec/bin/go build -o /private/var/folders/cn/n7rwdd_95_l54s3zdnbxvw040000gn/T/Unnamedgo -gcflags "-N -l" github.com/kfirufk/test
API server listening at: 127.0.0.1:53111
5

Я получаю вывод программы правильно, но Intellij не остановился в требуемой точке останова.

проблема воспроизводится на Intellij 2017.1.3 с плагином Go Lang 0.171.1928 на MacOS Sierra 10.12.4.

Обновить

пытаясь поиграть с углублением intellij, чтобы попытаться лучше понять, что происходит:

/Users/ufk/Library/Application\ Support/IntelliJIdea2017.1/intellij-go/lib/dlv/mac/dlv exec ./test

затем я выполнил:

(dlv) step

и получил:

Command failed: could not find FDE for PC 0x78bc000

я не понял, как использовать delve, или здесь что-то не работает?

Обновить

yeap .. с continue отладчик правильно работает с обеими версиями delve (установленной из homebrew и версии intellij). но по-прежнему intellij работает так же, не останавливается на точках останова. Я создаю точку останова на test2.go в строке, когда печатаю переменную.

Любые идеи ?


person ufk    schedule 18.05.2017    source источник
comment
Отключите ldflags из конфигурации запуска и попробуйте еще раз, пожалуйста.   -  person dlsniper    schedule 18.05.2017
comment
@dlsniper - результат тот же   -  person ufk    schedule 18.05.2017
comment
Какая у вас версия плагина IDE / Go? Не могли бы вы предоставить более подробную информацию о приложении, которое вы пытаетесь отлаживать? Есть ли в нем CGO? Вы используете символические ссылки? Может ли приложение с открытым исходным кодом воспроизвести это? Спасибо   -  person dlsniper    schedule 18.05.2017
comment
@dlsniper - спасибо за ответ. обновленный основной пост, я не использую символические ссылки и базовое воспроизведение, которое я опубликовал в обновленном посте, вероятно, он не использует никаких CGO.   -  person ufk    schedule 19.05.2017
comment
Попробуйте delve из командной строки, поскольку это то, что они используют для отладки.   -  person eduncan911    schedule 19.05.2017
comment
@ eduncan911 - спасибо. обновлен основной пост   -  person ufk    schedule 19.05.2017
comment
не используйте ничего intellij. установите delve из исходного кода или свой менеджер пакетов и попробуйте его независимо от IntelloJ. IOW, исключите Delve из проблемы, так как я не знаю единственного, кто использует IntelliJ для отладки Go. github.com/derekparker/delve также убедитесь, что ваш 'go env' настроен в соответствии со спецификациями Golang ( ваш gopath, src и т. д. настраивается нормально - не отклоняйтесь от инструкций и разрабатывайте внутри вашего Gopath.)   -  person eduncan911    schedule 19.05.2017
comment
@ eduncan911 - привет. похоже, что я не знал, как правильно использовать delve. обе версии brew и intellij дают одинаковые результаты. если я установлю точку останова и продолжу, копание остановится на запрошенной точке останова.   -  person ufk    schedule 20.05.2017
comment
@ eduncan911 многие используют IntelliJ для отладки (или Go, если на то пошло). ufk где вы ставите точку останова и она не работает? Я не могу воссоздать проблему из IDE, используя ту же настройку, которую вы упомянули. Однако вам нужно запустить continue not step, если вы собираетесь использовать delve из командной строки.   -  person dlsniper    schedule 21.05.2017
comment
@ eduncan911 - спасибо за ответ. снова обновил главный пост.   -  person ufk    schedule 22.05.2017
comment
@ eduncan911 - хорошо .. теперь это работает, единственное, что я сделал, это удалил каталог vendor со всеми соответствующими пакетами go с помощью glide, и вместо этого я установил его с помощью 'go get. / ...'. спасибо, что помогли мне приблизиться к решению проблемы. аааа ... напишите ответ с описанием того, что мы здесь сделали, чтобы получить награду   -  person ufk    schedule 23.05.2017
comment
Пожалуйста, измените серверную часть отладки на нативную через Настройки | Сборка, отладка и развертывание | Отладчик | Вникнуть и установить флажок использовать родной?   -  person dlsniper    schedule 24.05.2017
comment
@ufk есть обновления?   -  person dlsniper    schedule 26.05.2017
comment
У меня была эта проблема, очень неприятная, с gogland # GO-171.4424.55 (12 мая 2017 г.). Плагин Go 171.4424.55.1932 На основе предложенного здесь предложения я обновил delve с помощью brew и выбрал Use native, и теперь у меня снова есть отладка. Спасибо!   -  person rfay    schedule 26.05.2017
comment
@dlsniper - после включения встроенного флажка, к сожалению, результаты такие же, он не останавливается на точках останова. раньше он работал после того, как я удалил какой-то каталог ... но он перестал работать ... странно ... не понимаю, что происходит   -  person ufk    schedule 26.05.2017
comment
Хорошо, ожидается, что он больше не работает с родным сервером. Откатить можно. Что вы имеете в виду, вы удалили каталог, и он сработал? Который из?   -  person dlsniper    schedule 26.05.2017
comment
@dlsniper - у меня были пакеты go, установленные локально с помощью диспетчера пакетов glide, как только я их удалил, я смог выполнить отладку. Я действительно не думаю, что это связано с удалением каталога ... может быть, это просто совпадение. теперь с включенным или отключенным собственным расширением оно не останавливается на точках останова   -  person ufk    schedule 26.05.2017
comment
@ufk, вы также можете попробовать ночную версию плагина, см. здесь blog.jetbrains.com/go/2017/05/12/gogland-eap-8-is-available о том, как это сделать. Gogland поставляется со своей собственной версией и не использует никаких других версий, если это не указано.   -  person dlsniper    schedule 26.05.2017
comment
@ufk не должно быть никакой корреляции между каталогами через скольжение и отладку. Если у вас все еще есть проблема даже при использовании ночного режима, пожалуйста, откройте проблему на Youtrack youtrack.jetbrains.com/ issues / Go и прикрепите журналы, вы можете найти их через Help | Показать журналы в ... Кроме того, перед добавлением журналов перейдите в Help | Параметры журнала отладки и добавьте следующую строку: # com.goide.dlv.DlvVm   -  person dlsniper    schedule 26.05.2017


Ответы (5)


Хорошо .. Наконец-то я понял. Я перепутал структуру GOROOT и структуру GOPATH и поместил свой проект в GOROOT вместо GOPATH.

вот что я сделал, чтобы решить проблему

Я полностью удалил go с brew uninstall --force go, а затем переустановил go со следующими переменными среды:

export GOPATH=$HOME/golang
export GOROOT=/usr/local/opt/go/libexec
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:$GOROOT/bin

затем я разместил свой проект на ~/golang/src/github.com/kfirufk/windy-server

и я наконец смог правильно отлаживать приложения go.

спасибо всем за помощь! :)

person ufk    schedule 28.05.2017

Для меня проблема решена добавлением:

export GOROOT="/usr/local/go"

в $ HOME / .profile.

РЕДАКТИРОВАТЬ: я использую LiteIde X35.2 с Delve Debugger Версия: 1.1.0 Сборка: $ Id: 1990ba12450cab9425a2ae62e6ab988725023d5c $

под:

DISTRIB = LinuxMint VERSION = 18.3 CODENAME = sylvia

RELEASE = # 41 ~ 16.04.1-Ubuntu SMP среда 10 октября 20:16:04 UTC 2018 UBUNTU_CODENAME = xenial KERNEL = 4.15.0-38-generic HDWPLATFORM = x86_64

DESKTOP_SESSION = XFCE WINDOWS_MANAGER = XFWM4 DESKTOP_COMPONENTS = kdevtmpfs gnome-keyring-d xfce4-session xfce4-panel xfce4-volumed polkit-gnome-au xfce4-power-man helpe4-terminal gnome-power-man xfce4-terminal

GTK = libgtk-3-0: amd64 3.18.9-1ubuntu3.3 GStreamer = gst-launch-1.0 версия 1.8.3 GStreamer 1.8.3 https://launchpad.net/distros/ubuntu/+source/gstreamer1.0

person cittaul    schedule 12.11.2018

В моем случае процесс уже был запущен в этом порту и не закрылся. Поэтому мне пришлось вручную остановить процесс и снова запустить его из IntelliJ.

person Vishal    schedule 26.12.2018

В моем случае (VSCode в Ubuntu 20.04), если проект находится внутри каталога символических ссылок (или подкаталога символического каталога), vscode покажет «непроверенные» точки останова и

«Ошибка CreateBreakpoint: не удалось найти файл ...»

что приводит к тому, что нельзя останавливаться на точках останова.

cd \`readlink -f <project dir>\` && code . 

будет в порядке.

person David Mortals    schedule 15.04.2020

В моем случае (GoLand) проблема заключалась в том, что флаг -trimpath не был установлен в моих конфигурациях отладки:

  1. Выполнить, отладить ..., изменить конфигурации.
  2. В элементе шаблонов перейдите к опции Go Test и добавьте аргумент -trimpath в аргументы инструмента Go.

Вы также можете установить в своей среде с помощью:

go env -w GOFLAGS="-trimpath"

Это также работает для опции отладки присоединения к процессу.

Вы можете увидеть журналы GoLand IDE в меню «Справка», «Показать файлы журналов». Это облегчит тебе жизнь.

Ссылка: https://youtrack.jetbrains.com/issue/GO-8277

person Ricardo Zanini    schedule 10.03.2021