Esiste qualche debugger interattivo Golang? [chiuso]


85

Il titolo lo riassume praticamente. Sto provando Go e mi manca davvero la possibilità di impostare punti di interruzione e di entrare / uscire / uscire quanto voglio in un ambiente interattivo. So di poter utilizzare gdb per eseguire il debug di Go, ma è piuttosto fastidioso rispetto all'utilizzo di un IDE che può essere collegato a gdb per il breakpoint.

Ho provato a cercarne uno e sono riuscito a trovare solo plugin o piccoli IDE che hanno l'evidenziazione della sintassi ma nessun debug.


A chiunque altro arrivi a questa domanda, assicurati di controllare le altre risposte, non solo quella (attualmente accettata) su GDB
Leigh

Risposte:


38

Aggiornamento : Personalmente, mentre GDB funziona, non sono un fan dell'uso in Go e ti farà sputare sangue. Dai un'occhiata ad alcune delle altre risposte per delle buone alternative.


Sì, naturalmente :)

Go ha un debugger (GDB)

Ecco il tutorial ufficiale su come usarlo.

Se desideri il "debug grafico" (ovvero l'impostazione dei punti di interruzione nell'editor), alcuni IDE ti consentono di farlo (con GDB in background).

In particolare, Eclipse, LiteIDE e Zeus ti consentono di impostare punti di interruzione ed eseguire il debug dal tuo ambiente di codifica (sorgente) . Ecco un video su come farlo con Zeus .


2
In seguito sono su un Mac e ho trovato il plug-in IntelliJ go per rendere lo sviluppo molto bello e facile, ma LiteIDE è davvero ottimo per il debug (anche se non perfetto funziona molto bene). Ho dovuto installare un GDB aggiornato per farlo funzionare, il che è stato un po 'doloroso.
Daniel Williams

4
Ha molti problemi e non sarà supportato dal team di go in futuro (a parte le funzionalità di base), vedere la mia risposta di seguito
metakeule

Il GDB si è rotto anni fa e non è più funzionante. La risposta accettata è completamente SBAGLIATA.
Michele Giuseppe Fadda

@ user4839438 uhh, le prime due righe sono letteralmente "non usare gdb in movimento". Personalmente ho usato il godebugche era piuttosto carino l'ultima volta che ci sono andato.
Benjamin Gruenbaum

Hai ragione, ma il titolo dice "Go has a debugger (gdb)" , che in realtà non è più vero ed è attualmente un disservizio. GDB lavorava con le vecchie versioni di golang, provare a farlo funzionare era una grande pita e, alla fine, non ha funzionato e non può funzionare. Sono un cucciolo felice con Dwelve, proverò anche Godebug .
Michele Giuseppe Fadda

29

Il supporto GDB per go ha molti problemi che non verranno risolti dal team di go.

Per maggiori informazioni, leggi il post di Rob Pike :

Sebbene ci sforzeremo di mantenere le funzionalità di base di gdb (tracce dello stack, valori di stampa) funzionanti sulle piattaforme supportate, la capacità di utilizzare il debugger per comprendere l'ambiente completo di un programma Go probabilmente non funzionerà mai e il miglioramento del supporto gdb non è una priorità per il team .

Stanno cercando altre opzioni di debug ma al momento non hanno piani concreti. La documentazione è obsoleta e lo runtime-gdb.pyscript fornito con go 1.2 non funziona per un GDB che è stato compilato con il supporto di python3 (l'attuale Ubuntu per esempio).


25
non è rassicurante per un linguaggio che sta iniziando ad essere adottato ora
Valerio

2
@ ValerioColtrè Non ho mai avuto bisogno di un debugger in go. unit test e Printf ("% # v", ...) mi hanno servito bene finora ...
metakeule

20
@metakeule Nessuno ha bisogno di un debugger, tuttavia, un buon debugger può rivelarsi incredibilmente utile e più efficiente nel debug, specialmente nel debug dei test falliti. Inoltre, i debugger non alterano il codice, mentre lo fanno le istruzioni print.
gotgenes

Dai documenti di GDB: "GDB non capisce bene i programmi Go. La gestione dello stack, il threading e il runtime contengono aspetti che differiscono abbastanza dal modello di esecuzione GDB si aspetta che possano confondere il debugger, anche quando il programma è compilato con gccgo. Come di conseguenza, sebbene GDB possa essere utile in alcune situazioni, non è un debugger affidabile per i programmi Go, in particolare quelli fortemente concorrenti "
masukomi

Come funziona Go con i debugger? "Abbiamo parlato per un po 'di un debugger Go personalizzato, ma non ce n'è ancora uno." di Russ Cox
Ivan Chau

24

Aggiornamento 2017: il progetto godebug menzionato di seguito è ora ufficialmente sostituito da derekparker / delve .


Risposta originale:

Ora (marzo 2015) hai un altro approccio, basato sulla strumentazione del codice.

mailgun / godebug :

godebugusa la generazione del codice sorgente per strumentare il tuo programma con chiamate di debug .
go tool coveradotta un approccio simile alla copertura del codice.

  • Quando si esegue godebug, analizza il programma, le chiamate alle funzioni degli strumenti, le dichiarazioni di variabili e le righe di istruzioni e restituisce il codice risultante da qualche parte (attualmente o stdout o in posizione sui file originali).
  • Quando esegui questo codice modificato, supponendo che tu abbia inserito un punto di interruzione da qualche parte, puoi esaminarlo e ispezionare le variabili.

In arrivo: valuta espressioni Go arbitrarie e scrivi su variabili.


Aggiornamento giugno 2015:

Anche se potrebbe non essere interattivo come "alcuni" potrebbero sperare, è comunque apprezzato (e ha la funzione di "passaggio in" ).
Vedi " Go ha un debugger ed è fantastico! " (Cloudfare)

ecco la parte interessante: invece di lottare con una mezza dozzina di ptraceinterfacce diverse che non sarebbero portabili, godebugriscrive il codice sorgente e inietta chiamate di funzione come godebug.Linesu ogni riga, godebug.Declaread ogni dichiarazione di variabile e godebug.SetTraceper i punti di interruzione (cioè ovunque digiti _ = "breakpoint").

Trovo questa soluzione geniale.
Ciò che si ottiene è un binario abilitato per il debug (possibilmente cross-compilato) che è possibile rilasciare su un server di staging proprio come si farebbe con un normale binario .

Quando viene raggiunto un punto di interruzione, il programma si fermerà in linea e ti aspetterà su stdin.

È la filosofia a binario singolo e zero dipendenze di Go che amiamo applicata al debug. Costruisce ovunque, funziona ovunque, senza bisogno di strumenti o autorizzazioni sul server.

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

Il debug è solo a make bin/rrdns GODEBUG=rrdns/...distanza.


Godebug è ora deprecato e si consiglia di utilizzare invece Delve
Alexandro de Oliveira

@AlexandrodeOliveira Grazie. Ho aggiornato la risposta di conseguenza.
VonC

Provando ad approfondire, sembra funzionare abbastanza bene. Mi sembra che questa risposta di uno strumento open source decente renda la domanda meno "fuori tema". Non ho voglia di valutare gli strumenti chiusi. Forse la domanda deve essere riformulata, ma ho sentito la ricerca di alternative a gdb dopo averlo trovato (gdb) non è davvero consigliato per andare.
Gerry Gleason

15

AGGIORNARE:

L'ho verificato e sono felice di segnalare che la versione: 2016.1.3, Build: 145.1617.8, rilasciata: 5 giugno 2016 funziona con Delve! Puoi scaricarlo qui: https://www.jetbrains.com/idea/download/ . Segui anche le istruzioni di installazione di approfondimento qui: https://github.com/derekparker/delve/tree/master/Documentation/installation

È un po 'traballante. Subito dopo aver ricevuto il prompt di accesso a OSX, il debug interattivo ha iniziato a funzionare. A volte, devo eseguire il debug di un semplice programma .go per avviarlo. Ma funziona ed è la migliore esperienza di debug interattiva per Go che abbia mai visto.

POST ORIGINALE:

Esiste qualche debugger interattivo Golang? Sì.

Esiste qualche debugger interattivo golang che valga la pena usare? No.

La configurazione di GDB su Mac è noiosa, ma fattibile.

Tuttavia, una volta che inizi a usarlo, ti renderai presto conto di aver perso tempo per installarlo.

Puoi persino configurare IntelliJ per usarlo.

L'unico valore che IntelliJ, LiteIDE, CGDB, ecc. Sembrano fornire è che puoi accertarti più rapidamente che il supporto per il debug GDB per Go è estremamente scarso.

Puoi usarlo per scorrere un po 'di codice Go, ma prova a stampare il valore di qualcosa di diverso dai valori delle variabili molto semplici e sprecherai il tuo tempo a desiderare un debugger decente.

Ecco un esempio di ciò che accade quando si tenta di stampare il valore di una struttura dati di una stringa map [stringa] utilizzando CGDB:

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

... che è completamente inutile.

Quindi, prova questo:

(gdb) print params["UserID"]

... e riceverai "Errore bus".

Delve ( https://github.com/derekparker/delve ) sembra promettente, poiché è scritto in Go, ma lo si guida utilizzando la console, non tramite un IDE.

Pagherei volentieri per la versione aziendale di IntelliJ (o qualsiasi altro IDE) che ha fatto un lavoro decente supportando il debug interattivo in Go.

A partire da ora, fmt.Printf("%v", variable)è quanto di meglio si possa.


Non più! risposta obsoleta.
Michele Giuseppe Fadda

mailgun / godebug è un enorme miglioramento; Vale la pena usarlo. Tuttavia, ciò che varrebbe davvero la pena utilizzare è un IDE con un debugger interattivo integrato. Il debug dalla console ricorda il debug degli anni '80. L'aggiunta di strumentazione al mio codice Go funziona, ma è un po 'invadente. Preferisco semplicemente (s) fare clic su una riga di codice per (s) impostare un punto di interruzione.
l3x

Ribadirò ... dvelve debugger + intelliJ idea IDE.!
Michele Giuseppe Fadda

Ehi utente4839438, ho appena notato il tuo post. Lo proverò. Se funziona, varrebbe sicuramente la pena di pagare eventuali costi di aggiornamento JetBrains. E non che sia importante per me, ma ho sentito che il debugger di Delve dovrebbe funzionare in MS Visual Studio. Vedi marketplace.visualstudio.com/items/lukehoban.Go
l3x

1
L'ho verificato e sono felice di segnalare che la versione: 2016.1.3, Build: 145.1617.8, rilasciata: 5 giugno 2016 funziona con Delve! Puoi scaricarlo qui: jetbrains.com/idea/download . Segui anche le istruzioni di installazione di Delve qui: github.com/derekparker/delve/tree/master/Documentation/…
l3x

9

MODIFICARE

Il debugger GO è ora un semplice plug-in in IntelliJ o PyCharm, non è necessario installare nient'altro. Cerca il plug-in Go nelle preferenze del plug-in.

Risposta originale (novembre 2015)

per chi cerca le ultime novità a partire dalla fine di novembre 2015:

approfondisci

https://github.com/derekparker/delve

e segui le istruzioni di costruzione / configurazione:

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

Ottieni l'ultima versione di IntelliJ (15) o PyCharm (5)

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

e ottieni il plug-in go-lang nell'IDE di tua scelta:

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. Imposta un nuovo progetto Go o importa un progetto.
  2. Configura You Go SDK come richiesto
  3. Imposta la tua libreria Go (di solito in GOROOT / src
  4. Imposta una configurazione di esecuzione dell'applicazione nell'angolo in alto a destra dall'icona "play":
  5. Modifica configurazioni -> fai clic su + -> Vai all'applicazione

Definisci il tuo pacchetto o file da eseguire.

Una volta terminato il setup, l'icona Play e l'icona Debug dovrebbero ora essere attive, e puoi impostare breakpoint, watch ecc ... come al solito.

Saluti


valutare / guardare non funziona per me: non è stato possibile trovare il valore del simbolo per ... Potresti risolvere questo problema?
Stefan Wuthrich - Altafino

guardare e valutare sembra funzionare bene per me, in PyCharm 5.0.3 CE e IntelliJ IDEA 15.0.2
MrE

In realtà non è necessario creare approfondire, il plug-in viene fornito in bundle automaticamente.
dlsniper

@dlsniper è recente? Quando ho provato, avevo installato il plugin go per un po ', l'ho aggiornato ma non ha funzionato fino a quando non ho creato delve.
MrE

@MrE delve è stato fornito con il plugin da quando è stato integrato, circa 3 mesi fa. Ma funziona solo su Linux e Mac OS X entrambi a 64 bit.
dlsniper


7

IDE DEBUG ON GO È POSSIBILE (ANCORA), REALMENTE FUNZIONA !

Delve funziona piuttosto bene su Mac OS X ed è supportato dal plug-in IntelliJ IDEA Go Lang .

L'ho testato su Mac OSX, IntelliJ Idea 14, Go 1.5.1, Delve 0.5

Ho dovuto eseguire i soliti cicli di creazione di un certificato autofirmato, aggiungendolo all'anello di sistema, ecc. (Necessario per eseguire un debugger in Mac OS X). Alla fine, ho impostato un progetto GO all'interno di IntelliJ e sono stato ripagato nel riguadagnare le solite caratteristiche IDE + debugger: impostazione dei breakpoint, ispezione delle variabili, single stepping.

È molto meglio che stampare valori per eseguire il debug del codice.


Puoi spiegare come lo hai impostato con IntelliJ? Il debugger deve essere eseguito come un endpoint HTTP, non è vero?
MrE

non importa ... ho trovato la documentazione, ecc ... ma a quanto pare richiede l'ultima versione di PyCharm o IntelliJ per funzionare immediatamente.
MrE

Non ho fatto niente di speciale, ho appena installato Dvelve e intelliJ 14, funziona ancora correttamente con IntelliJ 15. Riguardo alle versioni precedenti: non lo so.
Michele Giuseppe Fadda

7
  1. Opzione uno: GDB https://golang.org/doc/gdb

  2. Scavare

  3. Visual Studio Code con il suo plug-in go (usa ancora approfondire).

Io personalmente uso l'opzione 3. Per questo dovrai aver installato delve .

Questo video mostra il debug in azione: https://youtu.be/uBjoTxosSys?t=16m11s (l'intero video è molto interessante).


Delve è in ritardo, ma è comunque migliore di altri IMO.
Ostati

1
Questo IMO è la migliore risposta. L'opzione n. 3 è anche una soluzione multipiattaforma. Delve ha alcune limitazioni ma il debug visivo di base funziona piuttosto bene.
gideon

1

Sono stato abbastanza soddisfatto di Gogland ( https://www.jetbrains.com/go/ ) che è fondamentalmente Intellij con supporto Go. Ha un debugger funzionante che continua a migliorare man mano che lo sviluppano. Lo uso da gennaio 2017 ed è stato per lo più stabile per me su un MBP 2016.

Goland è il nome in codice di un nuovo IDE commerciale di JetBrains volto a fornire un ambiente ergonomico per lo sviluppo di Go.


Molto bella! LiteIDE è stato un po '... troppo leggero. Amo IntelliJ e controllerò questo.
Daniel Williams
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.