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

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

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

Ответ 1

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


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

Go имеет отладчик (GDB)

Вот официальный учебник о том, как его использовать.

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

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

Ответ 2

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

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

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

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

Ответ 3

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


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

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

mailgun/godebug:

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

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

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


Обновление в июне 2015 года:

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

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

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

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

Это однобиблиотечная философия нулевой зависимости 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/....

Ответ 4

UPDATE:

Я проверил его и рад сообщить, что Версия: 2016.1.3, Build: 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, но попробуйте распечатать значение чего-либо, кроме очень простых значений переменных, и вы будете тратить свое время на достойный отладчик.

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

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

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

Затем попробуйте следующее:

(gdb) print params["UserID"]

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

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

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

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

Ответ 5

ИЗМЕНИТЬ

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

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

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

получить delve

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
  • Настройте новый проект Go или Импортируйте проект.
  • Устанавливайте программу Go SDK по запросу
  • Установите свою библиотеку Go (обычно в GOROOT/src
  • Настройте конфигурацию "Запустить приложение" в правом верхнем углу с помощью значка "play":
  • Изменить конфигурации → нажмите + → Перейти приложение

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

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

Приветствия

Ответ 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 +: установка контрольных точек, проверка переменных, однократное шаговое соединение.

Этот способ лучше, чем печатать значения для отладки кода.

Ответ 9

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

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