Существует ли какой-нибудь интерактивный отладчик golang? [закрыто]

85

Название в значительной степени подводит итог. Я пробую Go, и мне очень не хватает возможности устанавливать точки останова и входить / выходить / выходить столько, сколько я хочу в интерактивной среде. Я знаю, что могу использовать GDB для отладки Go, но это довольно неприятно по сравнению с использованием IDE, которая может подключаться к GDB для установки точек останова.

Я попытался найти его и смог найти только плагины или небольшие IDE с подсветкой синтаксиса, но без отладки.

Дэниел Уильямс
источник
Всем, кто задается этим вопросом, обязательно ознакомьтесь с другими ответами, а не только с (принятым в настоящее время) о GDB
Ли

Ответы:

38

Обновление : Лично, пока GDB работает, я не поклонник его использования в Go, и это заставит вас пролить кровь. Ознакомьтесь с некоторыми другими ответами на предмет хороших альтернатив.


Да, конечно :)

В Go есть отладчик (GDB)

Вот официальное руководство по его использованию.

Если вам нужна «графическая отладка» (то есть установка точек останова в редакторе), некоторые IDE позволяют это делать (с GDB в фоновом режиме).

В частности, Eclipse, LiteIDE и Zeus позволяют вам устанавливать точки останова и выполнять отладку из вашей среды кодирования (источника) . Вот видео о том, как это сделать с Zeus .

Бенджамин Грюнбаум
источник
2
В качестве продолжения я использую Mac, и я обнаружил, что плагин IntelliJ go делает разработку очень простой и приятной, но LiteIDE действительно хорош при отладке (хотя и не идеален, он работает очень хорошо). Мне пришлось установить обновленный GDB, чтобы он вообще заработал, что было довольно болезненно.
Дэниел Уильямс
4
У него много проблем, и он не будет поддерживаться командой go в будущем (кроме базовой функциональности), см. Мой ответ ниже
metakeule
GDB разорился много лет назад и больше не работает. Принятый ответ - НЕПРАВИЛЬНЫЙ.
Мишель Джузеппе Фадда
@ user4839438 эээ, первые две строчки буквально «не используйте gdb на ходу». Я лично использовал, godebugкоторый был довольно хорош в прошлый раз.
Бенджамин Грюнбаум
Вы правы, но в заголовке написано: «В Go есть отладчик (gdb)» , что на самом деле больше не соответствует действительности и в настоящее время оказывает медвежью услугу. GDB работал со старыми версиями golang, попытки заставить его работать были большой проблемой, и в конце концов он не работал и, возможно, не может работать. Я счастливый щенок с Dwelve, я тоже попробую godebug .
Мишель Джузеппе Фадда
29

Поддержка GDB для go имеет множество проблем, которые не будут исправлены командой go.

Для получения дополнительной информации прочтите сообщение Роба Пайка :

Хотя мы постараемся сохранить базовую функциональность GDB (трассировки стека, печать значений) на поддерживаемых платформах, возможность использовать отладчик для понимания всей среды программы Go, скорее всего, никогда не сработает, а улучшение поддержки GDB не является приоритетом для команды. .

Они ищут другие варианты отладки, но пока у них нет конкретных планов. Документация устарела, и runtime-gdb.pyсценарий, поставляемый с go 1.2, не работает для GDB, который был скомпилирован с поддержкой python3 (например, текущий Ubuntu).

метакула
источник
25
это не обнадеживает для языка, который сейчас начинает приниматься
Валерио
2
@ ValerioColtrè Мне никогда не требовался отладчик на ходу. модульные тесты и Printf ("% # v", ...) до сих пор хорошо служили мне ...
metakeule
20
@metakeule Никому не нужен отладчик, однако хороший отладчик может оказаться невероятно полезным и более эффективным при отладке, особенно при отладке неудачных тестов. Кроме того, отладчики не изменяют ваш код, в отличие от операторов печати.
gotgenes
Из документации GDB: «GDB плохо понимает программы Go. Управление стеком, потоки и среда выполнения содержат аспекты, которые достаточно отличаются от модели выполнения. GDB ожидает, что они могут запутать отладчик, даже если программа скомпилирована с помощью gccgo. как следствие, хотя GDB может быть полезен в некоторых ситуациях, он не является надежным отладчиком для программ Go, особенно сильно параллельных »
Масукоми
Как Go работает с отладчиками? «Мы некоторое время говорили о настраиваемом отладчике Go, но его пока нет». Расс Кокс
Иван Чау
24

Обновление 2017: упомянутый ниже проект godebug теперь официально заменен на derekparker / delve .


Оригинальный ответ:

Теперь (март 2015 г.) у вас есть другой подход, основанный на инструментировании кода.

mailgun / godebug :

godebugиспользует генерацию исходного кода для оснащения вашей программы отладочными вызовами .
go tool coverиспользует аналогичный подход к покрытию кода.

  • Когда вы запускаете godebug, он анализирует вашу программу, вызовы функций инструментов, объявления переменных и строки операторов и выводит где-то полученный код (в настоящее время либо стандартный вывод, либо вместо ваших исходных файлов).
  • Когда вы запускаете этот измененный код, предполагая, что вы где-то поставили точку останова, вы можете пройти по нему и проверить переменные.

Далее: оцените произвольные выражения Go и запишите переменные.


Обновление июнь 2015 г .:

Хотя он может быть не таким интерактивным, как могли бы надеяться «некоторые», он все же ценится (и имеет функцию «шаг вперед» ).
См. «В Go есть отладчик - и это круто ! » (Cloudfare)

вот что интересно: вместо того, чтобы бороться с полдюжиной разных ptraceинтерфейсов, которые нельзя было бы переносить, он godebugпереписывает исходный код и вставляет вызовы функций, например, godebug.Lineв каждую строку, godebug.Declareпри каждом объявлении переменной и godebug.SetTraceдля точек останова (т.е. везде, где вы вводите_ = "breakpoint" ).

Я считаю это решение блестящим.
В результате вы получаете (возможно, кросс-скомпилированный) двоичный файл с поддержкой отладки, который вы можете разместить на промежуточном сервере так же, как и с обычным двоичным файлом. .

Когда будет достигнута точка останова, программа остановится и будет ждать вас на стандартном вводе.

Это одинарная двоичная философия Go с нулевыми зависимостями, которую мы любим применять при отладке. Создается повсюду, запускается повсюду, не требуя инструментов или разрешений на сервере.

ifdef GODEBUG  
    GOPATH="${PWD}" go install github.com/mailgun/godebug
    GOPATH="${PWD}" ./bin/godebug build -instrument "${GODEBUG}" -o bin/rrdns rrdns

Отладка совсем make bin/rrdns GODEBUG=rrdns/...рядом.

VonC
источник
Godebug теперь устарел, и они рекомендуют использовать вместо него Delve
Александро де Оливейра
@AlexandrodeOliveira Спасибо. Я соответственно обновил ответ.
VonC
Попробовать углубиться, похоже, работает очень хорошо. Мне кажется, что этот ответ достойного инструмента с открытым исходным кодом делает вопрос менее "не по теме". Я не хочу оценивать закрытые инструменты. Возможно, этот вопрос нужно перефразировать, но я слышал, что поиск альтернатив gdb после того, как нашел его (gdb), действительно не рекомендуется для использования.
Джерри Глисон
15

ОБНОВИТЬ:

Я проверил его и рад сообщить, что Версия: 2016.1.3, Сборка: 145.1617.8, Дата выпуска: 5 июня 2016 г. работает с Delve! Вы можете скачать его здесь: https://www.jetbrains.com/idea/download/ . Также следуйте инструкциям по установке Delve здесь: https://github.com/derekparker/delve/tree/master/Documentation/installation

Это немного ненадежно. Сразу после того, как я получил приглашение входа в OSX, интерактивная отладка начала работать. Иногда мне нужно отладить простую программу .go, чтобы запустить ее. Но он действительно работает и является лучшим интерактивным средством отладки для Go, которое я когда-либо видел.

ОРИГИНАЛЬНЫЙ ЗАПИСЬ:

Существует ли интерактивный отладчик golang? Да.

Существует ли какой-нибудь интерактивный отладчик golang, который стоит использовать? Нет.

Настроить GDB на Mac утомительно, но выполнимо.

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

Вы даже можете настроить IntelliJ для его использования.

Единственная ценность, которую, по-видимому, предоставляют IntelliJ, LiteIDE, CGDB и т. Д., Заключается в том, что вы можете быстрее убедиться, что поддержка отладки GDB для Go крайне слабая.

Вы можете использовать его для пошагового выполнения некоторого кода Go, но попробуйте распечатать значение чего-либо, кроме очень простых значений переменных, и вы потратите свое время на поиски достойного отладчика.

Вот пример того, что происходит, когда вы пытаетесь распечатать значение строковой структуры данных map [string] с помощью CGDB:

(gdb) print params
$1 = (github.com/go-martini/martini.Params) 0x15582 <runtime.reentersyscall+450>

... что совершенно бесполезно.

Далее попробуйте это:

(gdb) print params["UserID"]

... и вы получите сообщение "Ошибка автобуса".

Спуск ( https://github.com/derekparker/delve ) выглядит многообещающим, поскольку он написан на Go, но вы управляете им с помощью консоли, а не через IDE.

Я бы с радостью заплатил за корпоративную версию IntelliJ (или любую другую IDE), которая хорошо справлялась с поддержкой интерактивной отладки в Go.

На данный момент fmt.Printf("%v", variable)почти все хорошо.

l3x
источник
Уже нет! устаревший ответ.
Мишель Джузеппе Фадда
mailgun / godebug - значительное улучшение; Стоит использовать. Однако было бы очень полезно использовать среду IDE со встроенным интерактивным отладчиком. Отладка с консоли напоминает отладку 80-х. Добавление инструментов в мой код Go работает, но немного навязчиво. Я бы предпочел просто (отменить) щелкнуть строку кода, чтобы (отменить) установить точку останова.
l3x
Я повторю ... отладчик dvelve + IDE intelliJ idea.!
Мишель Джузеппе Фадда
Привет, user4839438, я только что заметил твой пост. Попробую. Если это сработает, безусловно, стоит заплатить любые сборы за обновление JetBrains. И не то чтобы для меня это важно, но я слышал, что отладчик Delve якобы работает в MS Visual Studio. См. Marketplace.visualstudio.com/items/lukehoban.Go
l3x
1
Я проверил его и рад сообщить, что Версия: 2016.1.3, Сборка: 145.1617.8, Дата выпуска: 5 июня 2016 г. работает с Delve! Вы можете скачать его здесь: jetbrains.com/idea/download . Также следуйте инструкциям по установке Delve здесь: github.com/derekparker/delve/tree/master/Documentation/…
l3x,
9

РЕДАКТИРОВАТЬ

Отладчик GO теперь представляет собой простой плагин для IntelliJ или PyCharm, ничего больше устанавливать не нужно. Просто найдите плагин Go в настройках плагина.

Оригинальный ответ (ноя 2015 г.)

для тех, кто ищет последние новости на конец ноября 2015 года:

копаться

https://github.com/derekparker/delve

и следуйте инструкциям по сборке / настройке:

https://github.com/derekparker/delve/wiki/Building

Получите последнюю версию IntelliJ (15) или PyCharm (5)

https://www.jetbrains.com/idea/download/

и установите плагин go-lang в выбранной IDE:

Pycharm -> Preference -> plugins -> search for go
current version is Version: 0.10.749
IntelliJ -> Preference -> plugins -> search for go
current version is Version: 0.10.749
  1. Создайте новый проект Go или импортируйте проект.
  2. Настройте Go SDK, как будет предложено
  3. Настройте свою библиотеку Go (обычно в GOROOT / src
  4. Настройте конфигурацию запуска приложения в правом верхнем углу с помощью значка воспроизведения:
  5. Изменить конфигурации -> щелкните + -> Перейти в приложение

Определите пакет или файл для запуска.

После завершения настройки значки воспроизведения и отладки должны стать активными, и вы можете установить точку останова, часы и т. Д. Как обычно.

Ура

MrE
источник
оценка / наблюдение не работают для меня: не удалось найти значение символа для ... Не могли бы вы решить эту проблему за вас?
Стефан Вутрих - Альтафино, 02
смотреть и оценивать, похоже, отлично работают для меня, в PyCharm 5.0.3 CE, а также в IntelliJ IDEA 15.0.2
MrE
На самом деле вам не нужно создавать delve, плагин поставляется с ним автоматически.
dlsniper 03
@dlsniper это недавно? Когда я пробовал, у меня был установлен плагин go, я обновился, но он не работал, пока я не построил delve.
MrE
@MrE delve поставляется с плагином с момента его интеграции, то есть около 3 месяцев назад. Но он работает только на 64-битных Linux и Mac OS X.
dlsniper 04
7

IDE DEBUG ON GO ВОЗМОЖНА (СНОВА), ДЕЙСТВИТЕЛЬНО РАБОТАЕТ !

Delve довольно хорошо работает в Mac OS X и поддерживается плагином IntelliJ IDEA Go Lang .

Я тестировал это на Mac OSX, IntelliJ Idea 14, Go 1.5.1, Delve 0.5

Мне пришлось пройти через обычные циклы создания самозаверяющего сертификата, добавления его в системное кольцо и т.д. (требуется для запуска отладчика в Mac OS X). В конце я установил проект GO внутри IntelliJ и получил вознаграждение за возвращение обычных функций отладчика IDE +: установка точек останова, проверка переменных, пошаговое выполнение.

Это лучше, чем выводить значения для отладки кода.

Мишель Джузеппе Фадда
источник
Вы можете объяснить, как это настроить с помощью IntelliJ? Отладчик должен работать как конечная точка HTTP, не так ли?
MrE
nevermind ... нашел документы и т.д ... но, по-видимому, требуется, чтобы последняя версия PyCharm или IntelliJ работала из коробки.
MrE
Я ничего особенного не сделал, я только что установил Dvelve и intelliJ 14, он по-прежнему корректно работает с IntelliJ 15. О предыдущих версиях: не знаю.
Мишель Джузеппе Фадда
7
  1. Вариант первый - GDB https://golang.org/doc/gdb

  2. Спускаться

  3. Visual Studio Code с его плагином go (все еще использует delve).

Я лично использую вариант 3. Для этого вам потребуется установить delve .

В этом видео показана отладка в действии: https://youtu.be/uBjoTxosSys?t=16m11s (все видео очень интересно).

Павел Николов
источник
Delve хоть и отстает, но все же лучше других IMO.
Остати 08
1
Это ИМО - лучший ответ. Вариант №3 - это тоже многоплатформенное решение. Delve имеет некоторые ограничения, но базовая визуальная отладка работает неплохо.
gideon
1

Я очень доволен Gogland ( https://www.jetbrains.com/go/ ), который в основном представляет собой Intellij с поддержкой Go. У него есть рабочий отладчик, который становится лучше по мере его разработки. Я использую его с января 2017 года, и он был в основном стабильным для меня на MBP 2016 года.

Goland - это кодовое название новой коммерческой IDE от JetBrains, цель которой - предоставить эргономичную среду для разработки Go.

мыйк
источник
Очень хорошо! LiteIDE был немного ... слишком легким. Я люблю IntelliJ и проверю это.
Дэниел Уильямс