Чи існує якийсь інтерактивний налагоджувач golang? [зачинено]


85

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

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


Будь-кому, хто погодиться на це питання, переконайтеся, що ви ознайомились з іншими відповідями, а не лише з (на даний момент прийнятою) про ГДБ
Лі

Відповіді:


38

Оновлення : Особисто, поки GDB працює, я не шанувальник використання його в Go, і це змусить вас сплюнути трохи крові. Перевірте деякі інші відповіді, щоб знайти хороші альтернативи.


Так, звісно :)

Go має налагоджувач (GDB)

Ось офіційний підручник про те, як ним користуватися.

Якщо вам потрібна "графічна налагодження" (тобто встановлення точок зупинення в редакторі), деякі середовища розробки дозволяють це робити (із GDB у фоновому режимі).

Зокрема, Eclipse, LiteIDE та Zeus дозволяють встановлювати точки зупинки та налагоджувати з вашого середовища кодування (джерело) . Ось відео про те, як це зробити за допомогою Зевса .


2
Як наступне, я працюю на mac, і я знайшов плагін IntelliJ go, щоб зробити розробку дуже приємною та простою, але LiteIDE справді чудово справляється з налагодженням (хоча і не ідеально, він працює дуже добре). Мені довелося встановити оновлений GDB, щоб він взагалі працював, що було якось боляче.
Даніель Вільямс

4
У нього багато питань, і він не буде підтримуватися командою go в майбутньому (крім базової функціональності), див. Мою відповідь нижче
metakeule

GDB на ходу зламався століття тому і більше не працює. Прийнята відповідь прямо НЕПРАВИЛЬНА.
Мікеле Джузеппе Фадда

@ user4839438 uhh, перші два рядки буквально "не використовувати 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è Мені ніколи не потрібен був налагоджувач у go. юніт-тести та Printf ("% # v", ...) мені поки добре послужили ...
metakeule

20
@metakeule Нікому не потрібен налагоджувач, однак, хороший налагоджувач може виявитись неймовірно корисним та більш ефективним при налагодженні - особливо при налагодженні невдалих тестів. Крім того, налагоджувачі не змінюють ваш код, тоді як оператори друку змінюють.
gotgenes

З документів GDB: "GDB погано розуміє програми Go. Управління стеком, потокові роботи та час роботи містять аспекти, які досить відрізняються від моделі виконання. GDB очікує, що вони можуть заплутати налагоджувач, навіть коли програма компілюється з gccgo. Як наслідок, хоча GDB може бути корисним у деяких ситуаціях, він не є надійним налагоджувачем для програм Go, особливо сильно паралельних "
masukomi

Як Go працює з налагоджувачами? "Ми деякий час говорили про спеціальний налагоджувач Go, але його ще немає". від Russ Cox
Ivan Chau

24

Оновлення 2017: згадуваний нижче проект godebug тепер офіційно замінений derekparker / delve .


Оригінальна відповідь:

Зараз у вас (березень 2015 р.) Є інший підхід, заснований на формуванні коду.

поштовий пістолет / 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/...відстані.


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 [рядок] за допомогою 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)це приблизно так само добре, наскільки це стає.


Більше ні! застаріла відповідь.
Мікеле Джузеппе Фадда

mailgun / godebug - це значне вдосконалення; Варто використовувати. Однак, що дуже варто було б використовувати, це IDE, який мав інтегрований інтерактивний налагоджувач. Налагодження з консолі нагадує налагодження у 80-х. Додавання інструментарію до мого коду Go працює, але трохи нав’язливо. Краще просто (не) клацніть на рядок коду, щоб (не) встановити точку зупинки.
l3x

Я переформулюю ... dvelve налагоджувач + intelliJ idea IDE.!
Мікеле Джузеппе Фадда

Привіт користувач4839438, я щойно помітив твій допис. Спробую. Якщо це спрацює, безумовно, варто заплатити будь-які збори за оновлення 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 Go SDK за запитом
  3. Налаштуйте свою бібліотеку Go (зазвичай у GOROOT / src
  4. Налаштування запуску конфігурації програми у верхньому правому куті за допомогою піктограми "відтворити":
  5. Редагувати конфігурації -> натисніть + -> Перейти до програми

Визначте ваш пакет або файл для запуску.

Після завершення налаштування піктограма відтворення та піктограма налагодження тепер повинні бути активними, і ви можете встановити точку зупинки, годинники тощо ... як зазвичай.

На ура


оцінка / перегляд не працює для мене: не вдалося знайти значення символу для ... Чи можете ви вирішити це для вас?
Стефан Вутріх - Альтафіно

дивитись та оцінювати мені здається добре в PyCharm 5.0.3 CE, а також IntelliJ IDEA 15.0.2
MrE

Насправді вам не потрібно будувати дельве, плагін постачається в комплекті автоматично.
dlsniper

@dlsniper це нещодавно? Коли я спробував, мені деякий час інсталювали плагін go, я модернізував, але це не спрацювало, поки я не побудував delve.
MrE

@MrE delve постачався з плагіном з моменту його інтеграції, тобто близько 3 місяців тому. Але це працює лише на Linux та Mac OS X, обидва 64-бітні.
dlsniper


7

ІДЕАГРАФІКАЦІЯ НА 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 з його плагіном go (як і раніше використовує delve).

Я особисто використовую варіант 3. Для нього вам потрібно буде встановити deveve .

Це відео показує налагодження в дії: https://youtu.be/uBjoTxosSys?t=16m11s (все відео дуже цікаве).


Хоча Delve відстає, але все ж кращий за інші IMO.
Остаті

1
Це ІМО - найкраща відповідь. Варіант №3 - це також багатоплатформене рішення. Delve має деякі обмеження, але основна візуальна налагодження працює досить добре.
gideon

1

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

Goland - кодова назва нової комерційної IDE від JetBrains, спрямованої на забезпечення ергономічного середовища для розробки Go.


Дуже хороша! LiteIDE був трохи ... занадто легким. Я люблю IntelliJ і перевірю це.
Даніель Вільямс,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.