Gibt es einen interaktiven Golang-Debugger? [geschlossen]

85

Der Titel fasst es ziemlich gut zusammen. Ich probiere Go aus und ich vermisse es wirklich, Haltepunkte setzen und in einer interaktiven Umgebung so viel ein- und aussteigen zu können, wie ich möchte. Ich weiß, dass ich gdb zum Debuggen von Go verwenden kann, aber das ist ziemlich ärgerlich im Vergleich zur Verwendung einer IDE, die sich für Breakpointing in gdb einbinden lässt.

Ich habe versucht, nach einem zu suchen, und konnte nur Plugins oder kleine IDEs finden, die eine Syntaxhervorhebung, aber kein Debugging aufweisen.

Daniel Williams
quelle
Für alle anderen, die auf diese Frage stoßen, stellen Sie sicher, dass Sie die anderen Antworten lesen, nicht nur die (derzeit akzeptierte) über GDB
Leigh

Antworten:

38

Update : Während GDB funktioniert, bin ich persönlich kein Fan davon, es in Go zu verwenden, und es wird Sie dazu bringen, etwas Blut zu spucken. Schauen Sie sich einige der anderen Antworten für gute Alternativen an.


Ja natürlich :)

Go hat einen Debugger (GDB)

Hier ist das offizielle Tutorial zur Verwendung.

Wenn Sie 'grafisches Debuggen' möchten (dh Haltepunkte im Editor festlegen), können Sie dies bei einigen IDEs tun (mit GDB im Hintergrund).

Mit Eclipse, LiteIDE und Zeus können Sie Haltepunkte festlegen und in Ihrer Codierungsumgebung (Quelle) debuggen . Hier ist ein Video, wie es mit Zeus geht .

Benjamin Gruenbaum
quelle
2
Als Folge davon bin ich auf einem Mac und habe festgestellt, dass das IntelliJ go-Plugin die Entwicklung sehr schön und einfach macht, aber das LiteIDE eignet sich hervorragend zum Debuggen (obwohl es nicht perfekt ist, funktioniert es sehr gut). Ich musste eine aktualisierte GDB installieren, damit sie überhaupt funktionierte, was irgendwie schmerzhaft war.
Daniel Williams
4
Es hat viele Probleme und wird in Zukunft nicht mehr vom go-Team unterstützt (abgesehen von den grundlegenden Funktionen), siehe meine Antwort unten
Metakeule
GDB on go ist vor langer Zeit pleite und funktioniert nicht mehr. Akzeptierte Antwort ist völlig falsch.
Michele Giuseppe Fadda
@ user4839438 uhh, die ersten beiden Zeilen lauten wörtlich "gdb on go nicht verwenden". Ich persönlich habe es benutzt, godebugwas beim letzten Mal ziemlich nett war.
Benjamin Gruenbaum
Sie haben Recht, aber der Titel lautet "Go has a debugger (gdb)" , was eigentlich nicht mehr stimmt und derzeit ein schlechter Dienst ist. GDB arbeitete früher mit alten Versionen von Golang. Der Versuch, es zum Laufen zu bringen, war eine große Pita, und am Ende funktionierte es nicht und kann unmöglich funktionieren. Ich bin ein glücklicher Welpe mit Dwelve, ich werde auch Godebug versuchen .
Michele Giuseppe Fadda
29

Die GDB-Unterstützung für go hat viele Probleme, die vom go-Team nicht behoben werden können.

Weitere Informationen finden Sie in dem Beitrag von Rob Pike :

Obwohl wir uns bemühen werden, die grundlegenden GDB-Funktionen (Stack-Traces, Druckwerte) auf unterstützten Plattformen funktionsfähig zu halten, wird die Möglichkeit, den Debugger zum Verständnis der vollständigen Umgebung eines Go-Programms zu verwenden, wahrscheinlich nie funktionieren, und die Verbesserung der GDB-Unterstützung hat für das Team keine Priorität .

Sie suchen nach anderen Debugging-Optionen, haben aber noch keine konkreten Pläne. Die Dokumentation ist veraltet und das runtime-gdb.pymit go 1.2 gelieferte Skript funktioniert nicht für eine GDB, die mit Python3-Unterstützung kompiliert wurde (z. B. aktuelles Ubuntu).

Metakeule
quelle
25
Das ist nicht beruhigend für eine Sprache, die gerade angenommen wird
Valerio
2
@ ValerioColtrè Ich brauchte nie einen Debugger in go. Unit-Tests und Printf ("% # v", ...) haben mir bisher
gute Dienste geleistet
20
@metakeule Niemand braucht einen Debugger. Ein guter Debugger kann sich jedoch als unglaublich hilfreich und effizienter beim Debuggen erweisen - insbesondere beim Debuggen fehlgeschlagener Tests. Außerdem ändern Debugger Ihren Code nicht, während print-Anweisungen dies tun.
Gotgenes
Aus den GDB-Dokumenten: "GDB versteht Go-Programme nicht gut. Die Stapelverwaltung, das Threading und die Laufzeit enthalten Aspekte, die sich ausreichend vom Ausführungsmodell unterscheiden. GDB erwartet, dass sie den Debugger verwirren können, selbst wenn das Programm mit gccgo kompiliert wird. As eine Konsequenz, obwohl GDB in einigen Situationen nützlich sein kann, ist es kein zuverlässiger Debugger für Go-Programme, besonders für stark gleichzeitige "
masukomi
Wie funktioniert Go mit Debuggern? "Wir haben eine Weile über einen benutzerdefinierten Go-Debugger gesprochen, aber es gibt noch keinen." von Russ Cox
Ivan Chau
24

Update 2017: Das unten erwähnte Godebug-Projekt wird nun offiziell durch derekparker / delve ersetzt .


Ursprüngliche Antwort:

Sie (März 2015) haben jetzt einen anderen Ansatz, der auf der Instrumentierung des Codes basiert.

Mailgun / Godebug :

godebugVerwendet die Quellcodegenerierung , um Ihr Programm mit Debugging-Aufrufen zu instrumentieren .
go tool coververfolgt einen ähnlichen Ansatz für die Codeabdeckung.

  • Wenn Sie es ausführen godebug, analysiert es Ihr Programm, die Funktionsaufrufe von Instrumenten, Variablendeklarationen und Anweisungszeilen und gibt den resultierenden Code irgendwo aus (derzeit entweder stdout oder an Ort und Stelle über Ihren Originaldateien).
  • Wenn Sie diesen geänderten Code ausführen und davon ausgehen, dass Sie irgendwo einen Haltepunkt setzen, können Sie ihn schrittweise durchlaufen und Variablen überprüfen.

Später: Auswerten beliebiger Go-Ausdrücke und Schreiben in Variablen.


Update Juni 2015:

Obwohl es möglicherweise nicht so interaktiv ist, wie "einige" hoffen, wird es dennoch geschätzt (und verfügt über die Funktion "Einstieg" ).
Siehe " Go hat einen Debugger - und es ist großartig! " (Cloudfare)

Hier ist das Coole: Anstatt mit einem halben Dutzend verschiedener ptraceSchnittstellen zu ringen , die nicht portabel wären, godebugschreibt man den Quellcode neu und fügt Funktionsaufrufe wie godebug.Linein jeder Zeile, godebug.Declarebei jeder Variablendeklaration und godebug.SetTracefür Haltepunkte (dh wo immer Sie eingeben _ = "breakpoint") ein.

Ich finde diese Lösung genial.
Was Sie daraus machen, ist eine (möglicherweise übergreifend kompilierte) Debug-fähige Binärdatei, die Sie wie bei einer normalen Binärdatei auf einem Staging-Server ablegen können .

Wenn ein Haltepunkt erreicht ist, stoppt das Programm inline und wartet auf stdin auf Sie.

Es ist die einfach-binäre Null-Abhängigkeits-Philosophie von Go, die wir gerne beim Debuggen anwenden. Wird überall erstellt, überall ausgeführt, ohne dass Tools oder Berechtigungen auf dem Server erforderlich sind.

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

Das Debuggen ist nur einen Katzensprung make bin/rrdns GODEBUG=rrdns/...entfernt.

VonC
quelle
Godebug ist jetzt veraltet und sie empfehlen, stattdessen Delve zu verwenden
Alexandro de Oliveira
@AlexandrodeOliveira Danke. Ich habe die Antwort entsprechend aktualisiert.
VonC
Das Ausprobieren scheint ziemlich gut zu funktionieren. Mir scheint, diese Antwort eines anständigen Open-Source-Tools macht die Frage weniger "off topic". Ich möchte geschlossene Tools nicht bewerten. Vielleicht muss die Frage neu formuliert werden, aber ich habe gehört, dass die Suche nach Alternativen zu GDB, nachdem ich sie gefunden habe (GDB), nicht wirklich für unterwegs empfohlen wird.
Gerry Gleason
15

AKTUALISIEREN:

Ich habe es ausgecheckt und freue mich, Ihnen mitteilen zu können, dass Version: 2016.1.3, Build: 145.1617.8, Veröffentlicht: 5. Juni 2016 mit Delve funktioniert! Sie können es hier herunterladen: https://www.jetbrains.com/idea/download/ . Befolgen Sie auch die Delve-Installationsanweisungen hier: https://github.com/derekparker/delve/tree/master/Documentation/installation

Es ist ein bisschen schuppig. Kurz nachdem ich die OSX-Anmeldeaufforderung erhalten hatte, begann das interaktive Debuggen zu funktionieren. Manchmal muss ich ein einfaches .go-Programm debuggen, um es zu starten. Aber es funktioniert und ist die beste interaktive Debugging-Erfahrung für Go, die ich gesehen habe.

ORIGINAL POST:

Gibt es einen interaktiven Golang-Debugger? Ja.

Gibt es einen interaktiven Golang-Debugger, der es wert ist, verwendet zu werden? Nein.

Das Konfigurieren von GDB auf dem Mac ist mühsam, aber machbar.

Sobald Sie es jedoch verwenden, werden Sie schnell feststellen, dass Sie nur Ihre Zeit mit der Installation verschwendet haben.

Sie können IntelliJ sogar für die Verwendung konfigurieren.

Der einzige Wert, den IntelliJ, LiteIDE, CGDB usw. zu bieten scheinen, besteht darin, dass Sie schneller feststellen können, dass die GDB-Debugging-Unterstützung für Go äußerst schlecht ist.

Sie können damit einen Go-Code durchgehen, aber versuchen Sie, den Wert von etwas anderem als sehr einfachen Variablenwerten zu drucken, und Sie werden Ihre Zeit damit verschwenden, sich einen anständigen Debugger zu wünschen.

Hier ist ein Beispiel dafür, was passiert, wenn Sie versuchen, den Wert einer Map [String] -String-Datenstruktur mit CGDB zu drucken:

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

... was völlig nutzlos ist.

Versuchen Sie als nächstes Folgendes:

(gdb) print params["UserID"]

... und Sie erhalten "Busfehler".

Delve ( https://github.com/derekparker/delve ) sieht vielversprechend aus, da es in Go geschrieben ist, Sie es jedoch über die Konsole und nicht über eine IDE steuern.

Ich würde gerne für die Unternehmensversion von IntelliJ (oder einer anderen IDE) bezahlen, die gute Arbeit bei der Unterstützung des interaktiven Debuggens in Go geleistet hat.

Ab sofort fmt.Printf("%v", variable)ist es so gut wie es nur geht.

l3x
quelle
Nicht länger! veraltete Antwort.
Michele Giuseppe Fadda
Mailgun / Godebug ist eine enorme Verbesserung; Es lohnt sich zu benutzen. Es lohnt sich jedoch sehr, eine IDE mit einem integrierten interaktiven Debugger zu verwenden. Das Debuggen von der Konsole erinnert an das Debuggen in den 80ern. Das Hinzufügen von Instrumenten zu meinem Go-Code funktioniert, ist jedoch etwas aufdringlich. Ich möchte lieber einfach (un) auf eine Codezeile klicken, um einen Haltepunkt (un) zu setzen.
13.x
Ich werde wiederholen ... dvelve Debugger + IntelliJ Idee IDE.!
Michele Giuseppe Fadda
Hey user4839438, ich habe gerade deinen Beitrag bemerkt. Werde es ausprobieren. Wenn das funktioniert, lohnt es sich auf jeden Fall, JetBrains-Upgrade-Gebühren zu zahlen. Und nicht, dass es mir wichtig wäre, aber ich habe gehört, dass der Delve-Debugger angeblich in MS Visual Studio funktioniert. Siehe marketplace.visualstudio.com/items/lukehoban.Go
L3x
1
Ich habe es ausgecheckt und freue mich, Ihnen mitteilen zu können, dass Version: 2016.1.3, Build: 145.1617.8, Veröffentlicht: 5. Juni 2016 mit Delve funktioniert! Sie können es hier herunterladen: jetbrains.com/idea/download . Befolgen Sie auch die Delve-Installationsanweisungen hier: github.com/derekparker/delve/tree/master/Documentation/…
l3x
9

BEARBEITEN

Der GO-Debugger ist jetzt ein einfaches Plugin in IntelliJ oder PyCharm, ohne dass Sie etwas anderes installieren müssen. Suchen Sie einfach in den Plugin-Einstellungen nach dem Go-Plugin.

Ursprüngliche Antwort (Nov 2015)

für diejenigen, die das Neueste ab Ende November 2015 suchen:

Tauchen Sie ein

https://github.com/derekparker/delve

und befolgen Sie die Anweisungen zum Erstellen / Einrichten:

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

Holen Sie sich die neuesten IntelliJ (15) oder PyCharm (5)

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

und holen Sie sich das go-lang-Plugin in die IDE Ihrer Wahl:

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. Richten Sie ein neues Go-Projekt ein oder importieren Sie ein Projekt.
  2. Richten Sie das Go SDK nach Aufforderung ein
  3. Richten Sie Ihre Go-Bibliothek ein (normalerweise in GOROOT / src
  4. Richten Sie eine Run Application-Konfiguration in der oberen rechten Ecke über das Symbol "Wiedergabe" ein:
  5. Konfigurationen bearbeiten -> klicken Sie auf + -> Anwendung starten

Definieren Sie das auszuführende Paket oder die auszuführende Datei.

Sobald Sie mit dem Setup fertig sind, sollten das Wiedergabesymbol und das Debug-Symbol jetzt aktiv sein, und Sie können wie gewohnt Haltepunkte, Uhren usw. festlegen.

Prost

MrE
quelle
auswerten / ansehen funktioniert bei mir nicht: Symbolwert für ... konnte nicht gefunden werden. Könnten Sie das für Sie beheben?
Stefan Wuthrich - Altafino
Anschauen und Auswerten scheinen für mich in PyCharm 5.0.3 CE sowie in IntelliJ IDEA 15.0.2
MrE
Sie müssen eigentlich kein Delve erstellen, das Plugin wird automatisch mitgeliefert.
Dlsniper
@dlsniper ist das neu? Als ich es versuchte, hatte ich das go-Plugin für eine Weile installiert, ich habe ein Upgrade durchgeführt, aber es hat nicht funktioniert, bis ich delve erstellt habe.
MrE
@MrE delve wurde mit dem Plugin ausgeliefert, seit es vor ungefähr 3 Monaten integriert wurde. Aber es funktioniert nur unter Linux und Mac OS X, beide 64-Bit.
Dlsniper
7

IDE DEBUG ON GO IST MÖGLICH (WIEDER), FUNKTIONIERT WIRKLICH !

Delve funktioniert unter Mac OS X recht gut und wird vom IntelliJ IDEA Go Lang-Plugin unterstützt .

Ich habe das unter Mac OSX, IntelliJ Idea 14, Go 1.5.1, Delve 0.5 getestet

Ich musste die üblichen Schleifen durchlaufen, um ein selbstsigniertes Zertifikat zu erstellen, es dem Systemring hinzuzufügen usw. (erforderlich, um einen Debugger unter Mac OS X auszuführen). Am Ende habe ich ein GO-Projekt in IntelliJ festgelegt und wurde zurückgezahlt, als ich die üblichen IDE + -Debugger-Funktionen wiedererlangt habe: Festlegen von Haltepunkten, Überprüfen von Variablen, Einzelschritt.

Das ist viel besser als das Ausdrucken von Werten, um Code zu debuggen.

Michele Giuseppe Fadda
quelle
Können Sie erklären, wie Sie es mit IntelliJ eingerichtet haben? Der Debugger muss als HTTP-Endpunkt ausgeführt werden, nicht wahr?
MrE
egal ... habe die Dokumente usw. gefunden ... aber anscheinend muss die neueste Version von PyCharm oder IntelliJ sofort funktionieren.
MrE
Ich habe nichts Besonderes gemacht, ich habe gerade Dvelve und IntelliJ 14 installiert. Es funktioniert immer noch korrekt mit IntelliJ 15. Über frühere Versionen: Ich weiß es nicht.
Michele Giuseppe Fadda
7
  1. Option eins - GDB https://golang.org/doc/gdb

  2. Tauchen Sie ein

  3. Visual Studio Code mit seinem Go-Plugin (verwendet weiterhin delve).

Ich persönlich verwende Option 3. Dafür muss delve installiert sein.

Dieses Video zeigt das Debuggen in Aktion: https://youtu.be/uBjoTxosSys?t=16m11s (das gesamte Video ist sehr interessant).

Pavel Nikolov
quelle
Delve bleibt zwar zurück, ist aber immer noch besser als andere IMO.
Ostati
1
Diese IMO ist die beste Antwort. Option 3 ist auch eine plattformübergreifende Lösung. Delve hat einige Einschränkungen, aber das grundlegende visuelle Debuggen funktioniert ziemlich gut.
Gideon
1

Ich war ziemlich zufrieden mit Gogland ( https://www.jetbrains.com/go/ ), das im Grunde Intellij mit Go-Unterstützung ist. Es gibt einen funktionierenden Debugger, der immer besser wird, während sie dies entwickeln. Ich benutze es seit Januar 2017 und es ist für mich auf einem 2016 MBP größtenteils stabil.

Goland ist der Codename für eine neue kommerzielle IDE von JetBrains, die eine ergonomische Umgebung für die Go-Entwicklung bieten soll.

Myyk
quelle
Sehr schön! LiteIDE war ein bisschen ... zu leicht. Ich liebe IntelliJ und werde das überprüfen.
Daniel Williams