Existe-t-il un débogueur interactif Golang? [fermé]


85

Le titre résume assez bien la situation. J'essaie Go et je manque vraiment de pouvoir définir des points d'arrêt et entrer / dépasser / sortir autant que je veux dans un environnement interactif. Je sais que je peux utiliser gdb pour déboguer Go, mais c'est assez ennuyeux par rapport à l'utilisation d'un IDE qui peut se connecter à gdb pour les points d'arrêt.

J'ai essayé d'en rechercher un et je n'ai trouvé que des plugins ou de petits IDE qui ont une coloration syntaxique mais pas de débogage.


À toute personne qui atterrit sur cette question, assurez-vous de vérifier les autres réponses, pas seulement celle (actuellement acceptée) sur GDB
Leigh

Réponses:


38

Mise à jour : Personnellement, tant que GDB fonctionne, je ne suis pas fan de son utilisation dans Go et cela vous fera cracher du sang. Découvrez quelques-unes des autres réponses pour de bonnes alternatives.


Oui bien sûr :)

Go a un débogueur (GDB)

Voici le tutoriel officiel sur son utilisation.

Si vous souhaitez un 'débogage graphique' (c'est-à-dire définir des points d'arrêt dans l'éditeur), certains IDE vous permettent de le faire (avec GDB en arrière-plan).

En particulier, Eclipse, LiteIDE et Zeus vous permettent tous de définir des points d'arrêt et de déboguer à partir de votre environnement de codage (source) . Voici une vidéo expliquant comment le faire avec Zeus .


2
En guise de suivi, je suis sur un mac et j'ai trouvé le plugin IntelliJ go pour rendre le développement très agréable et facile mais le LiteIDE est vraiment excellent pour le débogage (bien que pas parfait, il fonctionne très bien). J'ai dû installer un GDB mis à jour pour le faire fonctionner, ce qui était un peu douloureux.
Daniel Williams

4
Il a beaucoup de problèmes et ne sera plus pris en charge par l'équipe go à l'avenir (à part les fonctionnalités de base), voir ma réponse ci
metakeule

GDB en marche a éclaté il y a longtemps et n'est plus fonctionnel. La réponse acceptée est carrément FAUX.
Michele Giuseppe Fadda

@ user4839438 euhh, les deux premières lignes sont littéralement "n'utilisez pas gdb en déplacement". J'ai personnellement utilisé godebugce qui était plutôt bien la dernière fois que je suis allé.
Benjamin Gruenbaum

Vous avez raison, mais le titre dit "Go a un débogueur (gdb)" , ce qui n'est plus vrai et est actuellement un mauvais service. GDB avait l'habitude de travailler avec d'anciennes versions de golang, essayer de le faire fonctionner était un gros pita, et à la fin, cela ne fonctionnait pas et ne pouvait pas fonctionner. Je suis un chiot heureux avec Dwelve, j'essaierai aussi godebug .
Michele Giuseppe Fadda

29

Le support GDB pour go présente de nombreux problèmes qui ne seront pas résolus par l'équipe go.

Pour plus d'informations, lisez l' article de Rob Pike :

Bien que nous nous efforcerions de conserver les fonctionnalités de base de gdb (traces de pile, valeurs d'impression) fonctionnant sur les plates-formes prises en charge, la possibilité d'utiliser le débogueur pour comprendre l'environnement complet d'un programme Go ne fonctionnera probablement jamais, et l'amélioration de la prise en charge de gdb n'est pas une priorité pour l'équipe. .

Ils recherchent d'autres options de débogage mais n'ont pas de plans concrets pour le moment. La documentation est obsolète et le runtime-gdb.pyscript fourni avec go 1.2 ne fonctionne pas pour un GDB qui a été compilé avec le support python3 (Ubuntu actuel par exemple).


25
ce n'est pas rassurant pour une langue qui commence à être adoptée maintenant
Valerio

2
@ ValerioColtrè Je n'ai jamais eu besoin d'un débogueur pour aller. les tests unitaires et Printf ("% # v", ...) m'ont bien servi jusqu'à présent ...
metakeule

20
@metakeule Personne n'a besoin d'un débogueur, cependant, un bon débogueur peut s'avérer incroyablement utile et plus efficace pour le débogage - en particulier pour le débogage des tests qui échouent. De plus, les débogueurs ne modifient pas votre code, contrairement aux instructions d'impression.
gotgenes

D'après la documentation GDB: "GDB ne comprend pas bien les programmes Go. La gestion de la pile, le threading et le runtime contiennent des aspects qui diffèrent suffisamment du modèle d'exécution, GDB s'attend à ce qu'ils puissent confondre le débogueur, même lorsque le programme est compilé avec gccgo. Comme une conséquence, bien que GDB puisse être utile dans certaines situations, ce n'est pas un débogueur fiable pour les programmes Go, en particulier les programmes fortement simultanés "
masukomi

Comment Go fonctionne-t-il avec les débogueurs? "Nous avons parlé pendant un moment d'un débogueur Go personnalisé, mais il n'y en a pas encore." par Russ Cox
Ivan Chau

24

Mise à jour 2017: le projet godebug mentionné ci-dessous est désormais officiellement remplacé par derekparker / delve .


Réponse originale:

Vous avez maintenant (mars 2015) une autre approche, basée sur l'instrumentation du code.

mailgun / godebug :

godebugutilise la génération de code source pour instrumenter votre programme avec des appels de débogage .
go tool coveradopte une approche similaire pour la couverture du code.

  • Lorsque vous exécutez godebug, il analyse votre programme, instruments les appels de fonction, les déclarations de variables et les lignes d'instruction, et génère le code résultant quelque part (actuellement stdout ou en place sur vos fichiers d'origine).
  • Lorsque vous exécutez ce code modifié, en supposant que vous avez placé un point d'arrêt quelque part, vous pouvez le parcourir et inspecter les variables.

À venir plus tard: évaluez des expressions Go arbitraires et écrivez dans des variables.


Mise à jour de juin 2015:

Bien qu'il ne soit peut-être pas aussi interactif que «certains» pourraient l'espérer, il est toujours apprécié (et a une fonction «step into» ).
Voir " Go a un débogueur - et c'est génial! " (Cloudfare)

voici le petit plus: au lieu de lutter avec une demi-douzaine d' ptraceinterfaces différentes qui ne seraient pas portables, godebugréécrit votre code source et injecte des appels de fonction comme godebug.Linesur chaque ligne, godebug.Declareà chaque déclaration de variable et godebug.SetTracepour les points d'arrêt (c'est-à-dire partout où vous tapez _ = "breakpoint").

Je trouve cette solution géniale.
Ce que vous en retirez, c'est un binaire activé pour le débogage (éventuellement compilé de manière croisée) que vous pouvez déposer sur un serveur intermédiaire comme vous le feriez avec un binaire normal .

Lorsqu'un point d'arrêt est atteint, le programme s'arrête en ligne et vous attend sur stdin.

C'est la philosophie de Go à un seul binaire et à zéro dépendance que nous adorons appliquée au débogage. Construit partout, fonctionne partout, sans outils ni autorisations sur le serveur.

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

Le débogage est à make bin/rrdns GODEBUG=rrdns/...portée de main.


Godebug est maintenant obsolète et ils recommandent d'utiliser Delve à la place
Alexandro de Oliveira

@AlexandrodeOliveira Merci. J'ai mis à jour la réponse en conséquence.
VonC

Essayer de fouiller semble fonctionner plutôt bien. Il me semble que cette réponse d'un outil open source décent rend la question moins «hors sujet». Je ne veux pas évaluer les outils fermés. Peut-être que la question doit être reformulée, mais j'ai entendu que la recherche d'alternatives à gdb après l'avoir trouvée (gdb) n'est pas vraiment recommandée pour aller.
Gerry Gleason

15

MISE À JOUR:

Je l'ai vérifié et je suis heureux d'annoncer que la version: 2016.1.3, Build: 145.1617.8, publiée le 5 juin 2016 fonctionne avec Delve! Vous pouvez le télécharger ici: https://www.jetbrains.com/idea/download/ . Suivez également les instructions d'installation de Delve ici: https://github.com/derekparker/delve/tree/master/Documentation/installation

C'est un peu floconneux. Juste après avoir reçu l'invite de connexion OSX, le débogage interactif a commencé à fonctionner. Parfois, je dois déboguer un simple programme .go pour le démarrer. Mais cela fonctionne et c'est la meilleure expérience de débogage interactive pour Go que j'ai vue.

POSTE ORIGINAL:

Existe-t-il un débogueur interactif Golang? Oui.

Existe-t-il un débogueur interactif Golang qui vaut la peine d'être utilisé? Non.

Configurer GDB sur le mac est fastidieux, mais faisable.

Cependant, une fois que vous commencez à l'utiliser, vous vous rendrez vite compte que vous venez de perdre votre temps à l'installer.

Vous pouvez même configurer IntelliJ pour l'utiliser.

La seule valeur qu'IntelliJ, LiteIDE, CGDB, etc. semblent fournir est que vous pouvez plus rapidement vérifier que la prise en charge du débogage GDB pour Go est extrêmement médiocre.

Vous pouvez l'utiliser pour parcourir du code Go, mais essayez d'imprimer la valeur de tout autre chose que des valeurs de variables très simples et vous perdrez votre temps à souhaiter un débogueur décent.

Voici un exemple de ce qui se passe lorsque vous essayez d'imprimer la valeur d'une structure de données de chaîne map [string] à l'aide de CGDB:

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

... ce qui est complètement inutile.

Ensuite, essayez ceci:

(gdb) print params["UserID"]

... et vous obtiendrez "Erreur de bus".

Delve ( https://github.com/derekparker/delve ) semble prometteur, car il est écrit en Go, mais vous le conduisez en utilisant la console, pas via un IDE.

Je paierais volontiers pour la version d'entreprise d'IntelliJ (ou de tout autre IDE) qui a fait un travail décent en prenant en charge le débogage interactif dans Go.

À partir de maintenant, fmt.Printf("%v", variable)c'est à peu près aussi bon que possible.


Plus maintenant! réponse obsolète.
Michele Giuseppe Fadda

mailgun / godebug est une grande amélioration; Cela vaut la peine d'être utilisé. Cependant, ce qui vaudrait vraiment la peine d'être utilisé, c'est un IDE avec un débogueur intégré et interactif. Le débogage depuis la console rappelle le débogage des années 80. L'ajout d'instrumentation à mon code Go fonctionne, mais est un peu intrusif. Je préfère simplement (dé) cliquer sur une ligne de code pour (dé) définir un point d'arrêt.
l3x du

Je vais reformuler ... dvelve debugger + intelliJ idea IDE.!
Michele Giuseppe Fadda

Hey user4839438, je viens de remarquer votre message. Je vais l'essayer. Si cela fonctionne, il vaudrait certainement la peine de payer les frais de mise à niveau JetBrains. Et non pas que cela compte pour moi, mais j'ai entendu dire que le débogueur Delve fonctionnait supposément dans MS Visual Studio. Voir marketplace.visualstudio.com/items/lukehoban.Go
l3x

1
Je l'ai vérifié et je suis heureux d'annoncer que la version: 2016.1.3, Build: 145.1617.8, publiée le 5 juin 2016 fonctionne avec Delve! Vous pouvez le télécharger ici: jetbrains.com/idea/download . Suivez également les instructions d'installation de Delve ici: github.com/derekparker/delve/tree/master/Documentation/…
l3x

9

ÉDITER

Le débogueur GO est désormais un simple plugin dans IntelliJ ou PyCharm, pas besoin d'installer quoi que ce soit d'autre. Recherchez simplement le plugin Go dans les préférences du plugin.

Réponse originale (novembre 2015)

pour ceux qui recherchent le dernier à fin novembre 2015:

se plonger

https://github.com/derekparker/delve

et suivez les instructions de construction / configuration:

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

Obtenez le dernier IntelliJ (15) ou PyCharm (5)

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

et récupérez le plugin go-lang dans l'IDE de votre choix:

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. Configurez un nouveau projet Go ou importez un projet.
  2. Configurez vous Go SDK lorsque vous y êtes invité
  3. Configurez votre bibliothèque Go (généralement dans GOROOT / src
  4. Configurez une configuration Run Application dans le coin supérieur droit par l'icône 'play':
  5. Modifier les configurations -> cliquez sur + -> Aller à l'application

Définissez votre package ou fichier à exécuter.

Une fois la configuration terminée, l'icône de lecture et l'icône de débogage devraient maintenant être actives, et vous pouvez définir le point d'arrêt, les montres, etc. comme d'habitude.

À votre santé


évaluer / regarder ne fonctionne pas pour moi: impossible de trouver la valeur du symbole pour ... Pouvez-vous résoudre ce problème pour vous?
Stefan Wuthrich - Altafino

regarder et évaluer semblent bien fonctionner pour moi, dans PyCharm 5.0.3 CE ainsi que dans IntelliJ IDEA 15.0.2
MrE

Vous n'avez en fait pas besoin de construire une exploration, le plugin est livré avec lui automatiquement.
dlsniper

@dlsniper est-ce récent? Quand j'ai essayé, j'avais installé le plugin go pendant un certain temps, j'ai mis à niveau mais cela n'a pas fonctionné jusqu'à ce que j'ai construit delve.
MrE le

@MrE delve est livré avec le plugin depuis son intégration, il y a environ 3 mois. Mais cela ne fonctionne que sur Linux et Mac OS X à la fois 64 bits.
dlsniper


7

IDE DEBUG ON GO EST POSSIBLE (ENCORE), FONCTIONNE VRAIMENT !

Delve fonctionne plutôt bien sur Mac OS X et est pris en charge par le plugin IntelliJ IDEA Go Lang .

J'ai testé cela sur Mac OSX, IntelliJ Idea 14, Go 1.5.1, Delve 0.5

Je devais exécuter les boucles habituelles de création d'un certificat auto-signé, de l'ajouter à l'anneau système, etc. (requis pour exécuter un débogueur sous Mac OS X). À la fin, j'ai défini un projet GO dans IntelliJ et j'ai été récompensé en récupérant les fonctionnalités habituelles du débogueur IDE +: définition des points d'arrêt, inspection des variables, pas à pas.

C'est bien mieux que d'imprimer des valeurs pour déboguer le code.


Pouvez-vous expliquer comment vous l'avez configuré avec IntelliJ? Le débogueur doit s'exécuter en tant que point de terminaison HTTP, n'est-ce pas?
MrE

tant pis ... j'ai trouvé la documentation etc ... mais nécessite apparemment la dernière version de PyCharm ou IntelliJ pour fonctionner hors de la boîte.
MrE

Je n'ai rien fait de spécial, je viens d'installer Dvelve et intelliJ 14, cela fonctionne toujours correctement avec IntelliJ 15. A propos des versions précédentes: je ne sais pas.
Michele Giuseppe Fadda

7
  1. Première option - GDB https://golang.org/doc/gdb

  2. Creuser

  3. Visual Studio Code avec son plugin go (utilise toujours delve).

J'utilise personnellement l'option 3. Pour cela, vous devrez avoir installé delve .

Cette vidéo montre le débogage en action: https://youtu.be/uBjoTxosSys?t=16m11s (toute la vidéo est très intéressante).


Delve est à la traîne mais toujours meilleur que les autres IMO.
Ostati

1
Cette OMI est la meilleure réponse. L'option n ° 3 est également une solution multi-plateforme. Delve a quelques limitations mais le débogage visuel de base fonctionne plutôt bien.
gideon le

1

J'ai été assez satisfait de Gogland ( https://www.jetbrains.com/go/ ) qui est essentiellement Intellij avec le support Go. Il a un débogueur fonctionnel qui ne cesse de s'améliorer au fur et à mesure qu'ils le développent. Je l'utilise depuis janvier 2017 et il a été essentiellement stable pour moi sur un MBP 2016.

Goland est le nom de code d'un nouvel IDE commercial de JetBrains visant à fournir un environnement ergonomique pour le développement Go.


Très agréable! LiteIDE a été un peu ... trop léger. J'adore IntelliJ et je vais vérifier cela.
Daniel Williams
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.