web-dev-qa-db-fra.com

Existe-t-il un débogueur interactif golang?

Le titre le résume assez bien. J'essaie Go et je suis vraiment incapable de définir des points d'arrêt et d'intervenir autant que je le souhaite dans un environnement interactif. Je sais que je peux utiliser gdb pour déboguer Go, mais c’est assez gênant comparé à l’utilisation de IDE) qui peut être connecté à gdb pour le point d’arrêt.

J'ai essayé d'en rechercher un et je ne pouvais trouver que des plugins ou de petits IDE ayant une coloration syntaxique mais pas de débogage.

80
Daniel Williams

Mise à jour : Personnellement, si GDB fonctionne, je ne suis pas partisan de l'utiliser dans Go et cela vous fera cracher du sang. Découvrez quelques-unes des autres réponses pour trouver de bonnes alternatives.


Oui bien sûr :)

Go a un débogueur (GDB)

Voici le tutoriel officiel sur la façon de l'utiliser.

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 sur la façon de le faire avec Zeus .

38

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

Pour plus d'informations, lisez le posté par Rob Pike :

Bien que nous nous efforcions de conserver les fonctionnalités de base de gdb (traces de pile, valeurs d'impression) sur les plateformes 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 encore de plans concrets. La documentation est obsolète et le runtime-gdb.pyscript fourni avec go 1.2 ne fonctionne pas pour une GDB compilée avec le support python3 (Ubuntu actuel par exemple).

29
metakeule

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


Réponse originale:

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

mailgun/godebug :

godebug utilise la génération de code source pour instrumenter votre programme avec des appels de débogage .
go tool cover adopte une approche similaire en matière de couverture de code.

  • Lorsque vous exécutez godebug, il analyse votre programme, les appels de fonction d’instruments, les déclarations de variable 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 placiez un point d'arrêt quelque part, vous pouvez le parcourir et inspecter les variables.

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


Mise à jour juin 2015:

Bien que cela ne soit peut-être pas aussi interactif que "certains" pourraient l'espérer, il est toujours apprécié (et a la fonctionnalité "pas à pas" ).
Voir " Go a un débogueur - et c'est génial! " (Cloudfare)

voici le bit sympa: au lieu de lutter avec une demi-douzaine d'interfaces ptrace différentes qui ne seraient pas portables, godebug réécrit votre code source et injecte des appels de fonction tels que godebug.Line sur chaque ligne, godebug.Declare à chaque déclaration de variable, et godebug.SetTrace pour les points d'arrêt (c'est-à-dire partout où vous tapez _ = "breakpoint").

Je trouve cette solution brillante.
Ce que vous obtenez est un binaire activé pour le débogage (éventuellement multi-compilé) que vous pouvez déposer sur un serveur de transfert, comme vous le feriez avec un fichier binaire standard .

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 à dépendance binaire unique, zéro dépendance, que nous adorons, appliquée au débogage. Construit partout, s’exécute 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 juste un make bin/rrdns GODEBUG=rrdns/... une façon.

24
VonC

MISE À JOUR:

Je l'ai vérifié et je suis heureux de signaler que Version: 2016.1.3, Version: 145.1617.8, Sortie: 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 constitue 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 mérite d'être utilisé? Non

Configurer GDB sur le Mac est fastidieux, mais faisable.

Cependant, une fois que vous aurez commencé à l'utiliser, vous réaliserez rapidement que vous venez de perdre votre temps à l'installer.

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

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

Vous pouvez l'utiliser pour parcourir un code Go, mais essayez d'imprimer une valeur autre que de très simples valeurs de variable 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 map [string] string à l'aide de CGDB:

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

... qui est complètement inutile.

Ensuite, essayez ceci:

(gdb) print params["UserID"]

... et vous obtiendrez une "erreur de bus".

Delve ( https://github.com/derekparker/delve ) semble prometteur, car il est écrit en Go, mais vous le pilotez à l'aide de la console, pas via un IDE.

Je serais heureux de payer pour la version d'entreprise d'IntelliJ (ou de tout autre IDE) qui effectue un travail correct prenant en charge le débogage interactif dans Go.

À ce jour, fmt.Printf("%v", variable) est à peu près aussi performant que possible.

15
l3x

EDIT

Le débogueur GO est maintenant un simple plugin dans IntelliJ ou PyCharm, inutile d’installer autre chose. Il suffit de chercher le plug-in Go dans les préférences du plug-in.

Réponse originale (nov. 2015)

pour ceux qui recherchent les dernières nouvelles à compter de la fin novembre 2015:

se plonger

https://github.com/derekparker/delve

et suivez les instructions de construction/installation:

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

Obtenez les dernières IntelliJ (15) ou PyCharm (5)

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

et obtenez le plug-in go-lang dans le 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. Setup vous allez SDK comme demandé
  3. Configurez votre bibliothèque Go (généralement dans GOROOT/src
  4. Configurez un coin supérieur droit de la configuration de l'exécution de l'application à l'aide de l'icône de lecture:
  5. Modifier les configurations -> cliquez sur + -> Aller dans l'application

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

Une fois la configuration terminée, les icônes Lecture et Débogage doivent maintenant être actives et vous pouvez définir les points d'arrêt, les surveillances, etc. comme d'habitude.

À votre santé

9
MrE

J'utilise heureusement CGDB, une petite malédiction autour de GDB.

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

  2. Delve

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

Personnellement, j’utilise l’option 3. Pour cela, vous aurez besoin de 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).

7
Pavel Nikolov

IDE DEBUG ON GO IS POSSIBLE (ENCORE DE NOUVEAU), FONCTIONNE EFFICACEMENT !

Delve fonctionne plutôt bien sur Mac OS X et est supporté par IntelliJ IDEAplugin 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. (nécessaire 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é pour avoir retrouvé les fonctionnalités habituelles du débogueur IDE +: définition de points d'arrêt, inspection de variables, pas à pas unique.

C'est bien mieux que d'afficher des valeurs pour déboguer du code.

7

Je suis assez satisfait de Gogland ( https://www.jetbrains.com/go/ ), qui est essentiellement un support Intellij avec Go. Il a un débogueur qui fonctionne de mieux en mieux. Je l'utilise depuis janvier 2017 et il est stable pour la plupart sur un MBP 2016.

Goland est le nom de code d’une nouvelle publicité IDE) de JetBrains destinée à fournir un environnement ergonomique pour le développement de Go.

1
myyk