it-swarm.com.de

Gibt es einen interaktiven Golang-Debugger?

Der Titel bringt es auf den Punkt. Ich probiere Go aus und vermisse es wirklich, in einer interaktiven Umgebung so viele Haltepunkte zu setzen und ein- und auszusteigen, wie ich möchte. Ich weiß, dass ich gdb zum Debuggen von Go verwenden kann, aber das ist ziemlich ärgerlich im Vergleich zur Verwendung eines IDE), das sich für Breakpointing in gdb einbinden lässt.

Ich habe nach einem gesucht und konnte nur Plugins oder kleine IDEs mit Syntaxhervorhebung, aber ohne Debugging finden.

80
Daniel Williams

Update : Persönlich, während GDB funktioniert, bin ich kein Fan davon, es in Go zu verwenden, und es bringt Sie dazu, 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 wie man es benutzt.

Wenn Sie das grafische Debuggen (dh das Festlegen von Haltepunkten im Editor) möchten, können Sie dies in einigen IDEs tun (mit GDB im Hintergrund).

Insbesondere können Sie mit Eclipse, LiteIDE und Zeus Haltepunkte setzen und in Ihrer Codierungsumgebung debuggen (Quelle) . Hier ist ein Video, wie es mit Zeus gemacht wird .

38

Der GDB-Support für go weist viele Probleme auf, die vom go-Team nicht behoben werden können.

Weitere Informationen finden Sie im Beitrag von Rob Pike :

Obwohl wir uns bemühen, die grundlegenden GDB-Funktionen (Stapelverfolgungen, Druckwerte) auf unterstützten Plattformen zu erhalten, wird die Fähigkeit, mit dem Debugger die vollständige Umgebung eines Go-Programms zu verstehen, 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 die runtime-gdb.pyscript, das mit go 1.2 geliefert wird, funktioniert nicht für eine GDB, die mit Python3-Unterstützung kompiliert wurde (aktuelles Ubuntu zum Beispiel).

29
metakeule

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


Ursprüngliche Antwort:

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

mailgun/godebug :

godebug verwendet die Generierung von Quellcode , um Ihr Programm mit Debugging-Aufrufen auszustatten.
go tool cover geht bei der Codeabdeckung ähnlich vor.

  • Wenn Sie godebug ausführen, werden Ihr Programm, Funktionsaufrufe des Instruments, Variablendeklarationen und Anweisungszeilen analysiert und der resultierende Code irgendwo ausgegeben (derzeit entweder stdout oder direkt ü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 durchgehen und Variablen untersuchen.

Später kommen: beliebige Go-Ausdrücke auswerten und in Variablen schreiben.


Update Juni 2015:

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

hier ist das Coole: Anstatt mit einem halben Dutzend verschiedener ptrace Schnittstellen zu ringen, die nicht portierbar wären, schreibt godebug Ihren Quellcode neu und fügt Funktionsaufrufe wie godebug.Line in jede Zeile ein , godebug.Declare Bei jeder Variablendeklaration und godebug.SetTrace Für Haltepunkte (dh wo immer Sie _ = "breakpoint" Eingeben).

Ich finde diese Lösung genial.
Das Ergebnis ist eine (möglicherweise überkompilierte) debug-fähige Binärdatei, die Sie wie eine normale Binärdatei auf einem Staging-Server ablegen können. ).

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

Es ist die Single-Binary-Philosophie von Go ohne Abhängigkeiten, die wir beim Debuggen lieben. 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 make bin/rrdns GODEBUG=rrdns/... Schritt entfernt.

24
VonC

AKTUALISIEREN:

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

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

ORIGINAL POST:

Gibt es einen interaktiven Golang-Debugger? Ja.

Gibt es einen interaktiven Golang-Debugger, dessen Verwendung sich lohnt? Nr.

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 damit verschwendet haben, es zu installieren.

Sie können IntelliJ sogar so konfigurieren, dass es verwendet wird.

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 unzureichend ist.

Sie können damit einen Schritt durch den Go-Code machen, aber versuchen, den Wert einer anderen als der sehr einfachen Variablenwerte auszudrucken, 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-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 du bekommst "Bus error".

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

Gerne bezahle ich für die Enterprise-Version von IntelliJ (oder einer anderen IDE), die das interaktive Debuggen in Go einwandfrei unterstützt.

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

15
l3x

EDIT

Der GO-Debugger ist jetzt ein einfaches Plugin in IntelliJ oder PyCharm, und es ist keine weitere Installation erforderlich. Suchen Sie einfach in den Plugin-Einstellungen nach dem Go-Plugin.

rsprüngliche Antwort (Nov 2015)

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

get delve

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 hol dir das go-lang-plugin im IDE deiner 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 oben rechts mit dem Symbol "Abspielen" ein:
  5. Konfigurationen bearbeiten -> klicken Sie auf + -> Go Application

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

Sobald das Setup abgeschlossen ist, sollten das Play-Symbol und das Debug-Symbol jetzt aktiv sein, und Sie können wie gewohnt Haltepunkte, Uhren usw. festlegen.

Prost

9
MrE

Ich benutze gerne CGDB, einen kleinen Curses-Wrapper um GDB.

8
pjvds
  1. Option eins - GDB https://golang.org/doc/gdb

  2. Delve

  3. Visual Studio Code mit seinem go plugin (benutzt immer noch delve).

Ich persönlich benutze 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).

7
Pavel Nikolov

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

Delve funktioniert unter Mac OS X recht gut und wird von IntelliJ IDEAGo Lang Plugin unterstützt.

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

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 in IntelliJ ein GO-Projekt erstellt und die üblichen IDE + -Debugger-Funktionen wiedererlangt: Festlegen von Haltepunkten, Überprüfen von Variablen, Einzelschritte.

Das ist viel besser, als Werte auszudrucken, um Code zu debuggen.

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 entwickelt haben. 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 ein neues kommerzielles IDE von JetBrains, das eine ergonomische Umgebung für die Go-Entwicklung bieten soll.

1
myyk