¿Existe algún depurador interactivo de golang? [cerrado]

85

El título lo resume bastante bien. Estoy probando Go y realmente extraño poder establecer puntos de interrupción y entrar / pasar / salir tanto como quiera dentro de un entorno interactivo. Sé que puedo usar gdb para depurar Go, pero eso es bastante molesto en comparación con el uso de un IDE que puede conectarse a gdb para realizar puntos de ruptura.

Intenté buscar uno y solo pude encontrar complementos o IDE pequeños que tienen resaltado de sintaxis pero sin depuración.

Daniel Williams
fuente
Para cualquier otra persona que llegue a esta pregunta, asegúrese de revisar las otras respuestas, no solo la (actualmente aceptada) sobre BGF
Leigh

Respuestas:

38

Actualización : Personalmente, aunque GDB funciona, no soy fanático de usarlo en Go y te hará escupir un poco de sangre. Consulte algunas de las otras respuestas para obtener buenas alternativas.


Sí, por supuesto :)

Go tiene un depurador (GDB)

Aquí está el tutorial oficial sobre cómo usarlo.

Si desea una 'depuración gráfica' (es decir, establecer puntos de interrupción en el editor), algunos IDE le permiten hacerlo (con GDB en segundo plano).

En concreto, Eclipse, LiteIDE y Zeus le permiten establecer puntos de interrupción y depurar desde su entorno de codificación (fuente) . Aquí hay un video sobre cómo hacerlo con Zeus .

Benjamin Gruenbaum
fuente
2
Como seguimiento, estoy en una Mac y encontré que el complemento IntelliJ go hace que el desarrollo sea muy agradable y fácil, pero LiteIDE es realmente excelente para depurar (aunque no es perfecto, funciona muy bien). Tuve que instalar un GDB actualizado para que funcionara, lo cual fue un poco doloroso.
Daniel Williams
4
Tiene muchos problemas y no será compatible con el equipo de go en el futuro (aparte de la funcionalidad básica), vea mi respuesta a continuación
metakeule
GDB se rompió hace mucho tiempo y ya no es funcional. La respuesta aceptada es completamente INCORRECTA.
Michele Giuseppe Fadda
@ user4839438 uhh, las dos primeras líneas son literalmente "no use gdb on go". Yo personalmente usé lo godebugque fue bastante bueno la última vez que fui.
Benjamin Gruenbaum
Tienes razón, pero el título dice "Go tiene un depurador (gdb)" , lo que en realidad ya no es cierto y actualmente es un flaco favor. GDB solía trabajar con versiones antiguas de golang, tratar de que funcionara era un gran problema y, al final, no funcionó y no puede funcionar. Soy un cachorro feliz con Dwelve, también intentaré godebug .
Michele Giuseppe Fadda
29

El soporte de GDB para go tiene muchos problemas que el equipo de go no solucionará.

Para obtener más información, lea la publicación de Rob Pike :

Aunque nos esforzaremos por mantener la funcionalidad básica de gdb (seguimientos de pila, valores de impresión) funcionando en plataformas compatibles, la capacidad de usar el depurador para comprender el entorno completo de un programa Go probablemente nunca funcionará, y mejorar el soporte de gdb no es una prioridad para el equipo. .

Están buscando otras opciones de depuración, pero por ahora no tienen planes concretos. La documentación está desactualizada y el runtime-gdb.pyscript que viene con go 1.2 no funciona para un GDB que fue compilado con soporte para python3 (Ubuntu actual por ejemplo).

metakeule
fuente
25
eso no es tranquilizador para un lenguaje que está comenzando a ser adoptado ahora
Valerio
2
@ ValerioColtrè Nunca necesité un depurador en marcha. pruebas unitarias y Printf ("% # v", ...) me sirvieron bien hasta ahora ...
metakeule
20
@metakeule Nadie necesita un depurador, sin embargo, un buen depurador puede resultar increíblemente útil y más eficiente en la depuración, especialmente en la depuración de pruebas fallidas. Además, los depuradores no alteran su código, mientras que las declaraciones de impresión sí lo hacen.
gotgenes
De los documentos de GDB: "GDB no comprende bien los programas Go. La administración de pila, el subproceso y el tiempo de ejecución contienen aspectos que difieren lo suficiente del modelo de ejecución GDB espera que puedan confundir al depurador, incluso cuando el programa se compila con gccgo. Como una consecuencia, aunque GDB puede ser útil en algunas situaciones, no es un depurador confiable para los programas Go, particularmente los que son muy concurrentes "
masukomi
¿Cómo funciona Go con depuradores? "Hemos hablado durante un tiempo sobre un depurador de Go personalizado, pero todavía no hay uno". por Russ Cox
Ivan Chau
24

Actualización 2017: el proyecto godebug que se menciona a continuación ahora es oficial reemplazado por derekparker / delve .


Respuesta original:

Ahora (marzo de 2015) tiene otro enfoque, basado en instrumentar el código.

mailgun / godebug :

godebugutiliza la generación de código fuente para instrumentar su programa con llamadas de depuración .
go tool coveradopta un enfoque similar para la cobertura del código.

  • Cuando lo ejecuta godebug, analiza su programa, instrumenta llamadas a funciones, declaraciones de variables y líneas de instrucciones, y genera el código resultante en alguna parte (actualmente, ya sea stdout o en su lugar sobre sus archivos originales).
  • Cuando ejecuta este código modificado, asumiendo que coloca un punto de interrupción en algún lugar, puede recorrerlo e inspeccionar las variables.

Próximamente: evalúe expresiones Go arbitrarias y escriba en variables.


Actualización de junio de 2015:

Si bien puede que no sea tan interactivo como "algunos" podrían esperar, aún se agradece (y tiene la función de "entrar" ).
Consulte " Go tiene un depurador, ¡y es increíble! " (Cloudfare)

Aquí está lo bueno: en lugar de luchar con media docena de ptraceinterfaces diferentes que no serían portátiles, godebugreescribe su código fuente e inyecta llamadas de función como godebug.Lineen cada línea, godebug.Declareen cada declaración de variable y godebug.SetTracepara puntos de interrupción (es decir, donde sea que escriba _ = "breakpoint").

Encuentro esta solución brillante.
Lo que obtiene de él es un binario habilitado para depuración (posiblemente compilado de forma cruzada) que puede colocar en un servidor de ensayo tal como lo haría con un binario normal .

Cuando se alcanza un punto de interrupción, el programa se detendrá en línea y lo esperará en stdin.

Es la filosofía de Go de un solo binario y cero dependencias que nos encanta aplicada a la depuración. Se crea en todas partes, se ejecuta en todas partes, sin necesidad de herramientas ni permisos en el servidor.

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

La depuración está a un make bin/rrdns GODEBUG=rrdns/...paso.

VonC
fuente
Godebug ahora está obsoleto y recomiendan usar Delve en su lugar
Alexandro de Oliveira
@AlexandrodeOliveira Gracias. He actualizado la respuesta en consecuencia.
VonC
Probar delve parece funcionar bastante bien. Me parece que esta respuesta de una herramienta de código abierto decente hace que la pregunta sea menos "fuera de tema". No quiero calificar las herramientas cerradas. Tal vez la pregunta deba ser reformulada, pero escuché buscar alternativas a gdb después de encontrarlo (gdb) no es realmente recomendable para ir.
Gerry Gleason
15

ACTUALIZAR:

Lo he comprobado y me complace informar que la Versión: 2016.1.3, Compilación: 145.1617.8, Lanzamiento: 5 de junio de 2016 funciona con Delve. Puede descargarlo aquí: https://www.jetbrains.com/idea/download/ . También siga las instrucciones de instalación de Delve aquí: https://github.com/derekparker/delve/tree/master/Documentation/installation

Es un poco escamoso. Justo después de recibir el mensaje de inicio de sesión de OSX, la depuración interactiva comenzó a funcionar. A veces, tengo que depurar un programa .go simple para iniciarlo. Pero funciona y es la mejor experiencia de depuración interactiva para Go que he visto.

POST ORIGINAL:

¿Existe algún depurador interactivo de golang? Si.

¿Existe algún depurador interactivo de golang que valga la pena usar? No.

Configurar GDB en Mac es tedioso, pero factible.

Sin embargo, una vez que empiece a utilizarlo, pronto se dará cuenta de que ha perdido el tiempo instalándolo.

Incluso puede configurar IntelliJ para usarlo.

El único valor que parecen proporcionar IntelliJ, LiteIDE, CGDB, etc. es que puede determinar más rápidamente que el soporte de depuración de GDB para Go es extremadamente deficiente.

Puede usarlo para recorrer algunos códigos de Go, pero intente imprimir el valor de cualquier cosa que no sean valores de variable muy simples y perderá el tiempo deseando un depurador decente.

Aquí hay un ejemplo de lo que sucede cuando intenta imprimir el valor de una estructura de datos de cadena de mapa [cadena] usando CGDB:

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

... que es completamente inútil.

A continuación, intente esto:

(gdb) print params["UserID"]

... y obtendrá "Error de bus".

Delve ( https://github.com/derekparker/delve ) parece prometedor, ya que está escrito en Go, pero lo maneja usando la consola, no a través de un IDE.

Con mucho gusto pagaría por la versión empresarial de IntelliJ (o cualquier otro IDE) que hizo un trabajo decente al respaldar la depuración interactiva en Go.

A partir de ahora, fmt.Printf("%v", variable)es tan bueno como parece.

l3x
fuente
¡Ya no! respuesta obsoleta.
Michele Giuseppe Fadda
mailgun / godebug es una gran mejora; Vale la pena usarlo. Sin embargo, lo que valdría la pena usar es un IDE que tuviera un depurador interactivo integrado. La depuración desde la consola recuerda a la depuración de los 80. Agregar instrumentación a mi código Go funciona, pero es un poco intrusivo. Prefiero simplemente (des) hacer clic en una fila de código para (des) establecer un punto de interrupción.
l3x
Voy a reafirmar ... dvelve debugger + intelliJ idea IDE.!
Michele Giuseppe Fadda
Hola usuario4839438, acabo de notar tu publicación. Lo probaré. Si eso funciona, sin duda valdría la pena pagar las tarifas de actualización de JetBrains. Y no es que me importe, pero escuché que el depurador Delve supuestamente funciona en MS Visual Studio. Ver marketplace.visualstudio.com/items/lukehoban.Go
l3x
1
Lo he comprobado y me complace informar que la Versión: 2016.1.3, Compilación: 145.1617.8, Lanzamiento: 5 de junio de 2016 funciona con Delve. Puede descargarlo aquí: jetbrains.com/idea/download . También siga las instrucciones de instalación de Delve
l3x
9

EDITAR

El depurador GO es ahora un complemento simple en IntelliJ o PyCharm, sin necesidad de instalar nada más. Simplemente busque el complemento Go en las preferencias del complemento.

Respuesta original (noviembre de 2015)

para aquellos que buscan lo último a finales de noviembre de 2015:

ahondar

https://github.com/derekparker/delve

y siga las instrucciones de construcción / configuración:

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

Obtenga la última versión de IntelliJ (15) o PyCharm (5)

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

y obtenga el complemento go-lang en el IDE de su elección:

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. Configure un nuevo proyecto de Go o importe un proyecto.
  2. Configure su Go SDK como se le solicite
  3. Configure su biblioteca Go (generalmente en GOROOT / src
  4. Configure una configuración Ejecutar aplicación en la esquina superior derecha con el icono 'reproducir':
  5. Editar configuraciones -> haga clic en + -> Ir a la aplicación

Defina su paquete o archivo para ejecutar.

Una vez que haya terminado con la configuración, el icono Reproducir y el icono Depurar ahora deberían estar activos, y puede establecer puntos de interrupción, relojes, etc.

Salud

MrE
fuente
evaluar / ver no funciona para mí: no se pudo encontrar el valor del símbolo para ... ¿Podrías resolver esto por ti?
Stefan Wuthrich - Altafino
mirar y evaluar parece funcionar bien para mí, en PyCharm 5.0.3 CE así como IntelliJ IDEA 15.0.2
MrE
En realidad, no necesita compilar delve, el complemento viene incluido automáticamente.
dlsniper
@dlsniper ¿es esto reciente? Cuando lo intenté, había tenido el complemento go instalado durante un tiempo, lo actualicé pero no funcionó hasta que construí delve.
MrE
@MrE delve se envió con el complemento desde que se integró, hace unos 3 meses. Pero solo funciona en Linux y Mac OS X, ambos de 64 bits.
dlsniper
7

IDE DEBUG ON GO ES POSIBLE (OTRA VEZ), ¡REALMENTE FUNCIONA !

Delve funciona bastante bien en Mac OS X y es compatible con el complemento IntelliJ IDEA Go Lang .

Lo probé en Mac OSX, IntelliJ Idea 14, Go 1.5.1, Delve 0.5

Tuve que ejecutar los ciclos habituales de creación de un certificado autofirmado, agregarlo al anillo del sistema, etc. (necesario para ejecutar un depurador en Mac OS X). Al final, configuré un proyecto GO dentro de IntelliJ y me pagaron recuperando las características habituales del depurador IDE +: establecer puntos de interrupción, inspeccionar variables, paso único.

Eso es mucho mejor que imprimir valores para depurar el código.

Michele Giuseppe Fadda
fuente
¿Puede explicar cómo lo configuró con IntelliJ? El depurador debe ejecutarse como un punto final HTTP, ¿no es así?
MrE
no importa ... encontré los documentos, etc ... pero aparentemente requiere la última versión de PyCharm o IntelliJ para funcionar de inmediato.
MrE
No hice nada especial, acabo de instalar Dvelve e intelliJ 14, todavía funciona correctamente con IntelliJ 15. Acerca de las versiones anteriores: no lo sé.
Michele Giuseppe Fadda
7
  1. Opción uno: GDB https://golang.org/doc/gdb

  2. Ahondar

  3. Visual Studio Code con su complemento go (todavía usa delve).

Yo personalmente uso la opción 3. Para ello necesitarás tener instalado delve .

Este video muestra la depuración en acción: https://youtu.be/uBjoTxosSys?t=16m11s (el video completo es muy interesante).

Pavel Nikolov
fuente
Sin embargo, Delve se está quedando atrás, pero sigue siendo mejor que otros, en mi opinión.
Ostati
1
Esta OMI es la mejor respuesta. La opción # 3 también es una solución multiplataforma. Delve tiene algunas limitaciones, pero la depuración visual básica funciona bastante bien.
gideon
1

Estoy bastante contento con Gogland ( https://www.jetbrains.com/go/ ), que es básicamente Intellij con soporte para Go. Tiene un depurador en funcionamiento que sigue mejorando a medida que lo han desarrollado. Lo he estado usando desde enero de 2017 y ha sido mayormente estable para mí en un MBP de 2016.

Goland es el nombre en clave de un nuevo IDE comercial de JetBrains destinado a proporcionar un entorno ergonómico para el desarrollo de Go.

myyk
fuente
¡Muy agradable! LiteIDE ha sido un poco ... demasiado ligero. Amo IntelliJ y comprobaré esto.
Daniel Williams