Go:
Utilizando un depurador

Cómo hacerlo:

Go proporciona una facilidad incorporada para la depuración llamada delve. Es una herramienta de depuración completa que te permite ejecutar programas Go paso a paso, inspeccionar variables del programa y evaluar expresiones.

Para comenzar, primero debes instalar delve. Puedes hacerlo ejecutando:

go get -u github.com/go-delve/delve/cmd/dlv

Ahora, vamos a depurar un simple programa Go. Considera un programa main.go:

package main

import "fmt"

func main() {
    message := "Depurando en Go"
    fmt.Println(message)
}

Para comenzar a depurar este programa, abre un terminal en el directorio del proyecto y ejecuta:

dlv debug

Este comando compila el programa con optimizaciones deshabilitadas (para mejorar la experiencia de depuración), lo inicia y adjunta un depurador a él.

Una vez que delve está en ejecución, estás en el shell interactivo del depurador. Aquí hay algunos comandos básicos:

  • break main.main establece un punto de interrupción en la función main.
  • continue reanuda la ejecución del programa hasta que se alcanza un punto de interrupción.
  • print message imprimirá el valor de la variable message.
  • next avanza la ejecución del programa a la siguiente línea.
  • quit sale del depurador.

La salida al alcanzar el punto de interrupción e imprimir la variable podría verse así:

Breakpoint 1 at 0x49ecf3 for main.main() ./main.go:6
> main.main() ./main.go:6 (hits goroutine(1):1 total:1) (PC: 0x49ecf3)
     1: package main
     2:
     3: import "fmt"
     4:
     5: func main() {
     6: =>    message := "Depurando en Go"
     7:       fmt.Println(message)
     8: }
(dlv) print message
"Depurando en Go"

Usando estos comandos, puedes avanzar por tu programa, inspeccionando el estado a medida que avanzas para entender cómo se comporta e identificar cualquier problema.

Estudio Profundo

La elección de delve como la herramienta de depuración de elección para Go sobre herramientas tradicionales como GDB (GNU Debugger) se debe principalmente a la naturaleza del modelo de ejecución y el tiempo de ejecución de Go. GDB no fue diseñado inicialmente teniendo en mente el tiempo de ejecución de Go, lo que hace que delve sea una opción más adecuada para los desarrolladores de Go. Delve está específicamente diseñado para Go, ofreciendo una experiencia de depuración más intuitiva para las goroutines de Go, canales y otros constructos específicos de Go.

Además, delve soporta una amplia gama de características más allá de las ofrecidas por GDB básico al trabajar con programas Go. Estas incluyen, pero no se limitan a: adjuntar a procesos en ejecución para depuración; puntos de interrupción condicionales; y evaluando expresiones complejas que pueden involucrar primitivas de concurrencia de Go.

Aunque delve es el depurador elegido por muchos desarrolladores de Go, vale la pena mencionar que la cadena de herramientas de Go también incluye formas de soporte de depuración más ligeras, como la herramienta incorporada pprof para perfilado y la herramienta trace para visualización de concurrencia. Estas herramientas a veces pueden proporcionar una vía más rápida o de más alto nivel para diagnosticar problemas de rendimiento del programa o errores de concurrencia, lo que podría ser complementario o incluso preferible dependiendo del contexto de la depuración.