Czy istnieje jakiś interaktywny debugger golang? [Zamknięte]

85

Tytuł w dużym stopniu to podsumowuje. Wypróbowuję Go i naprawdę brakuje mi możliwości ustawiania punktów przerwania i wchodzenia / przekraczania / wychodzenia tak bardzo, jak chcę, w interaktywnym środowisku. Wiem, że mogę używać gdb do debugowania Go, ale jest to dość denerwujące w porównaniu do używania IDE, które można podłączyć do gdb w celu określenia punktów przerwania.

Próbowałem znaleźć jeden i mogłem znaleźć tylko wtyczki lub małe IDE, które mają podświetlanie składni, ale nie mają debugowania.

Daniel Williams
źródło
Każdemu, kto trafi na to pytanie, upewnij się, że zapoznałeś się z innymi odpowiedziami, a nie tylko (obecnie akceptowaną) dotyczącą GDB
Leigh

Odpowiedzi:

38

Aktualizacja : Osobiście, chociaż GDB działa, nie jestem fanem używania go w Go i sprawi, że wyplujesz trochę krwi. Sprawdź inne odpowiedzi, aby znaleźć dobre alternatywy.


Tak oczywiście :)

Go ma debugger (GDB)

Oto oficjalny poradnik, jak go używać.

Jeśli chcesz „debugowania graficznego” (czyli ustawiania punktów przerwania w edytorze), niektóre IDE pozwalają to zrobić (z GDB w tle).

W szczególności Eclipse, LiteIDE i Zeus pozwalają ustawić punkty przerwania i debugować w środowisku kodowania (źródło) . Oto film o tym, jak to zrobić z Zeusem .

Benjamin Gruenbaum
źródło
2
Jako kontynuacja używam Maca i znalazłem wtyczkę IntelliJ go, która sprawia, że ​​programowanie jest bardzo przyjemne i łatwe, ale LiteIDE jest naprawdę świetny w debugowaniu (choć nie jest doskonały, działa bardzo dobrze). Musiałem zainstalować zaktualizowaną GDB, aby w ogóle działała, co było trochę bolesne.
Daniel Williams
4
Ma wiele problemów i nie będzie obsługiwany przez zespół go w przyszłości (poza podstawową funkcjonalnością), zobacz moją odpowiedź poniżej
metakeule
GDB on go zepsuł się wieki temu i nie jest już funkcjonalny. Zaakceptowana odpowiedź jest całkowicie ZŁA.
Michele Giuseppe Fadda
@ user4839438 uhh, pierwsze dwie linie to dosłownie „nie używaj gdb w ruchu”. Osobiście użyłem, godebugco było całkiem miłe ostatnim razem.
Benjamin Gruenbaum
Masz rację, ale w tytule jest napisane „Go ma debugger (gdb)” , co w rzeczywistości nie jest już prawdą i jest obecnie złą przysługą. GDB pracowało ze starszymi wersjami golanga, próbując go uruchomić, była to wielka pita, a ostatecznie nie działało i prawdopodobnie nie może działać. Jestem szczęśliwym szczeniakiem z Dwelve, spróbuję też godebug .
Michele Giuseppe Fadda
29

Obsługa GDB dla go ma wiele problemów, które nie zostaną naprawione przez zespół go.

Aby uzyskać więcej informacji, przeczytaj post Roba Pike'a :

Chociaż będziemy starać się, aby podstawowe funkcje gdb (ślady stosu, wartości drukowania) działały na obsługiwanych platformach, możliwość korzystania z debugera w celu zrozumienia pełnego środowiska programu Go prawdopodobnie nigdy nie zadziała, a poprawa obsługi gdb nie jest priorytetem dla zespołu .

Szukają innych opcji debugowania, ale nie mają na razie konkretnych planów. Dokumentacja jest nieaktualna, a runtime-gdb.pyskrypt dołączony do go 1.2 nie działa dla GDB, który został skompilowany z obsługą Python3 (na przykład obecny Ubuntu).

metakeule
źródło
25
to nie jest uspokajające dla języka, który zaczyna być teraz adoptowany
Valerio
2
@ ValerioColtrè Nigdy nie potrzebowałem debuggera w go. testy jednostkowe i Printf ("% # v", ...) jak dotąd dobrze mi służyły ...
metakeule
20
@metakeule Nikt nie potrzebuje debuggera, jednak dobry debugger może okazać się niezwykle pomocny i skuteczniejszy w debugowaniu - szczególnie w debugowaniu testów zakończonych niepowodzeniem. Ponadto debuggery nie zmieniają kodu, podczas gdy instrukcje print tak.
gotgenes
Z dokumentacji GDB: „GDB nie rozumie dobrze programów Go. Zarządzanie stosem, wątkowanie i środowisko wykonawcze zawierają aspekty, które różnią się wystarczająco od modelu wykonawczego GDB oczekuje, że mogą zmylić debugger, nawet gdy program jest skompilowany za pomocą gccgo. Jak w konsekwencji, chociaż GDB może być przydatny w niektórych sytuacjach, nie jest to niezawodny debugger dla programów Go, szczególnie mocno współbieżnych ”
masukomi
Jak działa Go z debuggerami? „Przez chwilę rozmawialiśmy o niestandardowym debugerze Go, ale jeszcze go nie ma”. Russ Cox
Ivan Chau,
24

Aktualizacja 2017: projekt godebug, o którym mowa poniżej, został oficjalnie zastąpiony przez derekparker / delve .


Oryginalna odpowiedź:

Masz teraz (marzec 2015 r.) Inne podejście, oparte na instrumentowaniu kodu.

mailgun / godebug :

godebugużywa generowania kodu źródłowego do oprzyrządowania programu za pomocą wywołań debugowania .
go tool coverma podobne podejście do pokrycia kodu.

  • Po uruchomieniu godebuganalizuje program, wywołania funkcji instrumentów, deklaracje zmiennych i wiersze instrukcji, a następnie wyświetla gdzieś wynikowy kod (obecnie albo na standardowe wyjście, albo w miejscu nad oryginalnymi plikami).
  • Po uruchomieniu tego zmodyfikowanego kodu, zakładając, że gdzieś umieścisz punkt przerwania, możesz przejść przez niego i sprawdzić zmienne.

Później: oceń dowolne wyrażenia Go i pisz do zmiennych.


Aktualizacja czerwiec 2015:

Chociaż może nie być tak interaktywny, jak mogliby mieć nadzieję „niektórzy”, nadal jest doceniany (i ma funkcję „wkraczania” ).
Zobacz „ Go ma debugger - i jest niesamowity! ” (Cloudfare)

oto fajny kawałek: zamiast zmagać się z pół tuzinem różnych ptraceinterfejsów, które nie byłyby przenośne, godebugprzepisuje kod źródłowy i wstrzykuje wywołania funkcji, jak godebug.Linew każdej linii, godebug.Declareprzy każdej deklaracji zmiennej i godebug.SetTracedla punktów przerwania (tj. gdziekolwiek piszesz _ = "breakpoint").

Uważam to rozwiązanie za genialne.
Otrzymujesz z tego (prawdopodobnie skompilowany krzyżowo) plik binarny z obsługą debugowania, który możesz upuścić na serwerze pomostowym, tak jak w przypadku zwykłego pliku binarnego .

Po osiągnięciu punktu przerwania program zatrzyma się w linii i będzie czekał na ciebie na stdin.

Jest to filozofia pojedynczego pliku binarnego, zerowych zależności w Go, którą uwielbiamy zastosować do debugowania. Kompiluje się wszędzie, działa wszędzie, bez narzędzi ani uprawnień na serwerze.

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

Debugowanie jest na wyciągnięcie ręki make bin/rrdns GODEBUG=rrdns/....

VonC
źródło
Godebug jest teraz przestarzały i zamiast tego zalecają używanie Delve
Alexandro de Oliveira,
@AlexandrodeOliveira Dziękuję. Odpowiednio zaktualizowałem odpowiedź.
VonC
Wydaje się, że wypróbowanie funkcji Delve działa całkiem nieźle. Wydaje mi się, że ta odpowiedź przyzwoitego narzędzia open source sprawia, że ​​pytanie jest mniej „nie na temat”. Nie chcę oceniać zamkniętych narzędzi. Być może pytanie wymaga przeformułowania, ale usłyszałem, że szukanie alternatyw dla gdb po znalezieniu go (gdb) nie jest tak naprawdę zalecane do go.
Gerry Gleason
15

AKTUALIZACJA:

Sprawdziłem to i z przyjemnością informuję, że wersja: 2016.1.3, kompilacja: 145.1617.8, wydana: 5 czerwca 2016 r. Współpracuje z Delve! Możesz go pobrać tutaj: https://www.jetbrains.com/idea/download/ . Postępuj również zgodnie z instrukcjami instalacji Delve tutaj: https://github.com/derekparker/delve/tree/master/Documentation/installation

To trochę kruche. Zaraz po wyświetleniu monitu o logowanie do OSX, interaktywne debugowanie zaczęło działać. Czasami muszę zdebugować prosty program .go, aby go uruchomić. Ale działa i jest najlepszym interaktywnym narzędziem do debugowania dla Go, jakie widziałem.

ORYGINALNY POST:

Czy istnieje jakiś interaktywny debugger golang? Tak.

Czy istnieje jakiś interaktywny debugger golang, którego warto używać? Nie.

Konfiguracja GDB na komputerze Mac jest żmudna, ale wykonalna.

Jednak gdy zaczniesz go używać, szybko zorientujesz się, że po prostu zmarnowałeś czas na jego instalację.

Możesz nawet skonfigurować IntelliJ, aby go używać.

Jedyną wartością, którą wydają się zapewniać IntelliJ, LiteIDE, CGDB itp., Jest to, że można szybciej ustalić, że obsługa debugowania GDB w Go jest bardzo słaba.

Możesz go użyć do przejścia przez jakiś kod Go, ale spróbuj wydrukować wartość czegokolwiek innego niż bardzo proste wartości zmiennych, a będziesz tracić czas na szukanie porządnego debuggera.

Oto przykład tego, co się dzieje, gdy próbujesz wydrukować wartość struktury danych w postaci łańcucha map [string] przy użyciu CGDB:

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

... co jest całkowicie bezużyteczne.

Następnie spróbuj tego:

(gdb) print params["UserID"]

... a otrzymasz komunikat „Błąd magistrali”.

Delve ( https://github.com/derekparker/delve ) wygląda obiecująco, ponieważ jest napisane w Go, ale sterujesz nią za pomocą konsoli, a nie przez IDE.

Chętnie zapłaciłbym za wersję IntelliJ dla przedsiębiorstw (lub jakiekolwiek inne IDE), które wykonało przyzwoitą robotę, wspierając interaktywne debugowanie w Go.

Na razie fmt.Printf("%v", variable)jest tak dobre, jak to tylko możliwe.

l3x
źródło
Nigdy więcej! nieaktualna odpowiedź.
Michele Giuseppe Fadda
mailgun / godebug to ogromne ulepszenie; Warto skorzystać. Jednak bardzo warto byłoby użyć IDE, które miało zintegrowany, interaktywny debugger. Debugowanie z konsoli przypomina debugowanie w latach 80-tych. Dodanie instrumentacji do mojego kodu Go działa, ale jest nieco uciążliwe. Wolałbym po prostu (od) kliknąć wiersz kodu, aby (od) ustawić punkt przerwania.
l3x
Powtórzę ... dvelve debugger + intelliJ idea IDE.!
Michele Giuseppe Fadda
Hej, użytkowniku4839438, właśnie zauważyłem twój post. Wypróbuję to. Jeśli to zadziała, z pewnością warto byłoby zapłacić wszelkie opłaty za uaktualnienie JetBrains. I nie żeby to miało dla mnie znaczenie, ale słyszałem, że debugger Delve podobno działa w MS Visual Studio. Zobacz marketplace.visualstudio.com/items/lukehoban.Go
l3x
1
Sprawdziłem to i z przyjemnością informuję, że wersja: 2016.1.3, kompilacja: 145.1617.8, wydana: 5 czerwca 2016 r. Współpracuje z Delve! Możesz go pobrać tutaj: jetbrains.com/idea/download . Postępuj również zgodnie z instrukcjami instalacji Delve tutaj: github.com/derekparker/delve/tree/master/Documentation/…
l3x
9

EDYTOWAĆ

Debugger GO jest teraz prostą wtyczką w IntelliJ lub PyCharm, nie ma potrzeby instalowania niczego innego. Po prostu poszukaj wtyczki Go w preferencjach wtyczki.

Oryginalna odpowiedź (listopad 2015 r.)

dla poszukujących aktualności na koniec listopada 2015:

dostać się dogłębnie

https://github.com/derekparker/delve

i postępuj zgodnie z instrukcjami kompilacji / konfiguracji:

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

Pobierz najnowszy IntelliJ (15) lub PyCharm (5)

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

i pobierz wtyczkę go-lang-plugin w wybranym 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. Skonfiguruj nowy projekt Go lub Importuj projekt.
  2. Skonfiguruj Go SDK zgodnie z monitem
  3. Skonfiguruj swoją bibliotekę Go (zwykle w GOROOT / src
  4. Skonfiguruj konfigurację Uruchom aplikację w prawym górnym rogu obok ikony `` odtwarzania '':
  5. Edytuj konfiguracje -> kliknij + -> Idź do aplikacji

Zdefiniuj pakiet lub plik do uruchomienia.

Po zakończeniu konfiguracji ikona Odtwórz i ikona debugowania powinny być teraz aktywne i możesz ustawić punkt przerwania, zegarki itp. Jak zwykle.

Twoje zdrowie

Pan
źródło
ocena / obserwacja nie działa dla mnie: nie można znaleźć wartości symbolu dla ... Czy możesz rozwiązać ten problem?
Stefan Wuthrich - Altafino
obserwacja i ocena wydają się działać dobrze dla mnie, w PyCharm 5.0.3 CE oraz IntelliJ IDEA 15.0.2
MrE
W rzeczywistości nie musisz budować delve, wtyczka jest dostarczana z nią automatycznie.
dlsniper,
@dlsniper czy to ostatnie? Kiedy próbowałem, przez jakiś czas instalowałem wtyczkę go, zaktualizowałem, ale nie działało, dopóki nie zbudowałem delve.
MrE
@MrE delve jest dostarczane z wtyczką od czasu jej integracji, czyli około 3 miesiące temu. Ale działa tylko w systemie Linux i Mac OS X w wersji 64-bitowej.
dlsniper
7

IDE DEBUG ON GO JEST MOŻLIWA (PONOWNIE), NAPRAWDĘ DZIAŁA !

Delve działa dość dobrze na Mac OS X i jest obsługiwany przez wtyczkę IntelliJ IDEA Go Lang .

Przetestowałem to na Mac OSX, IntelliJ Idea 14, Go 1.5.1, Delve 0.5

Musiałem przejść przez zwykłe pętle tworzenia certyfikatu z podpisem własnym, dodawania go do pierścienia systemowego itp. (Wymagane do uruchomienia debugera w systemie Mac OS X). Na koniec ustawiłem projekt GO w IntelliJ i otrzymałem wynagrodzenie za odzyskanie zwykłych funkcji debuggera IDE +: ustawianie punktów przerwania, inspekcja zmiennych, pojedynczy krok.

To o wiele lepsze niż drukowanie wartości w celu debugowania kodu.

Michele Giuseppe Fadda
źródło
Czy możesz wyjaśnić, jak skonfigurowałeś to z IntelliJ? Debugger musi działać jako punkt końcowy HTTP, prawda?
PanE
nieważne ... znalazłem dokumenty itp ... ale najwyraźniej wymaga najnowszej wersji PyCharm lub IntelliJ do działania po wyjęciu z pudełka.
PanE
Nie zrobiłem nic specjalnego, właśnie zainstalowałem Dvelve i intelliJ 14, nadal działa poprawnie z IntelliJ 15. O poprzednich wersjach: nie wiem.
Michele Giuseppe Fadda
7
  1. Opcja pierwsza - GDB https://golang.org/doc/gdb

  2. Sięgać

  3. Visual Studio Code z jego wtyczką go (nadal używa delve).

Osobiście korzystam z opcji 3. W tym celu musisz mieć zainstalowaną aplikację delve .

Ten film pokazuje debugowanie w akcji: https://youtu.be/uBjoTxosSys?t=16m11s (całe wideo jest bardzo interesujące).

Pavel Nikolov
źródło
Delve pozostaje jednak w tyle, ale nadal jest lepszy niż inne IMO.
Ostati
1
Ta IMO jest najlepszą odpowiedzią. Opcja nr 3 to także rozwiązanie wieloplatformowe. Aplikacja Delve ma pewne ograniczenia, ale podstawowe debugowanie wizualne działa raczej dobrze.
gideon
1

Byłem całkiem zadowolony z Gogland ( https://www.jetbrains.com/go/ ), który jest w zasadzie Intellij z obsługą Go. Ma działający debugger, który jest coraz lepszy, gdy go rozwijali. Używam go od stycznia 2017 roku i jest dla mnie stabilny na MBP 2016.

Goland to kryptonim nowego komercyjnego IDE firmy JetBrains, którego celem jest zapewnienie ergonomicznego środowiska dla rozwoju Go.

myyk
źródło
Bardzo dobrze! LiteIDE było trochę ... za lekkie. Uwielbiam IntelliJ i sprawdzę to.
Daniel Williams,