Можно ли отлаживать исполняемые файлы go перед сборкой с помощью GoLand?

Мне интересно, может ли GoLand использовать dlv exec команда для отладки.

Причина, по которой нам это нужно, заключается в том, что у нас сложный процесс сборки с CGO, и невозможно создать работающую конфигурацию запуска.

Возможно, присоединение к процессу может сработать, но это не похоже на отличное решение.

VSCode имеет хорошую интеграцию с dlv exec, но IDE работает слишком медленно и глючит, хотелось бы, чтобы мы могли использовать GoLand.

Кто-нибудь нашел решение для этого?

Заранее спасибо.


person code monkey    schedule 11.08.2020    source источник
comment
Насколько я знаю (если это не изменилось за последние пару лет), Delve работает, аннотируя код и компилируя модифицированный двоичный файл (во многом так же, как работает профилировщик). Таким образом, вы не можете использовать его для готовых двоичных файлов, вам нужен исходный код.   -  person Not_a_Golfer    schedule 11.08.2020
comment
Я не знаю, как точно работает delve, но в документации для exec указано: Эта команда заставит Delve выполнить двоичный файл и немедленно присоединить его, чтобы начать новый сеанс отладки. Обратите внимание, что если бинарный файл не был скомпилирован с отключенными оптимизациями, его правильная отладка может быть затруднена. Рассмотрите возможность компиляции отладочных двоичных файлов с параметром -gcflags=all=-N -l в Go 1.10 или более поздней версии, -gcflags=-N -l в более ранних версиях Go.   -  person code monkey    schedule 12.08.2020
comment
Я предполагаю, что вся необходимая отладочная информация может быть сгенерирована в процессе сборки (по крайней мере, для начальной части кода). Например, такие приложения, как gdlv и даже VSCode, могут отлаживать двоичный файл.   -  person code monkey    schedule 12.08.2020


Ответы (1)


Вы можете выполнить те же действия, что и в отладка удаленного процесса.

Вот эти шаги:

  • создайте двоичный файл с go build -gcflags="all=-N -l" -o myApp и любыми другими флагами, которые могут вам понадобиться для CGO/и т. д.
  • запустите двоичный файл, используя dlv --listen=:2345 --headless=true --api-version=2 exec ./myApp
  • перейдите к Run | Edit Configurations | + | Go Remote и создайте новую конфигурацию запуска, которая подключается к localhost через порт 2345 (или любой другой порт, указанный вами в delve с флагом --listen.
person dlsniper    schedule 12.08.2020
comment
Да, спасибо, как раз искал что-то подобное. Нам удалось использовать стандартную конфигурацию запуска после долгих хлопот, но это прекрасно работает и будет полезно. - person code monkey; 12.08.2020
comment
Не могли бы вы помочь нам понять, где конфигурация запуска вызвала проблемы? Мы хотели бы узнать об этом и посмотреть, сможем ли мы улучшить его. youtrack.jetbrains.com/issues/Go для отслеживания или найдите меня в Твиттере с таким же имя пользователя как здесь. Спасибо! - person dlsniper; 12.08.2020
comment
Конечно вещь. В данном случае проблема заключается в том, насколько специфичен наш процесс сборки. Мы компилируем по крайней мере 5 библиотек cpp с помощью gcc, используя cgo, но некоторым людям в команде приходится использовать Windows, используя порт gcc MinGW и т. д. Так что существует множество переменных env, параметров компилятора и самих приложений, которые используют много флагов. Так что получить все это правильно в конфигурации запуска, которая также является мультиплатформенной, довольно сложно. У нас есть собственная система сборки, которая справляется со многими из этих сложностей, и мы хотим ее использовать. Другими словами, отладка исполняемых файлов предварительной сборки — это функциональность, которую мы ищем. - person code monkey; 12.08.2020
comment
Тем не менее, спасибо за ссылку, есть пара других проблем, с которыми мы сталкиваемся, и нам может понадобиться помощь, поскольку мы новичок в GoLand. - person code monkey; 12.08.2020