Utilizo Delve como herramienta de depuracion al desarrollar en Golang.
Instalacion:
go install github.com/go-delve/delve/cmd/dlv@latestdlv debugdlv attach <PID>dlv testlist
# alias: lslist main.main
# or
list ./main.go:10break main.main
# alias: b
# or specific line
break ./main.go:20
# or relative line based on a statement
break main.main:2
# or when you are already in a statement you can specify the line in the file
break 13Solo puedes crear breakpoints en lineas del statement.
No puedes crear un breakpoint si:
- Es a una linea vacia
- Solo es una linea de cierre de estructura, por ejemplo
} - Es una linea de una funcion/metodo/statement que no forma parte de la ruta de ejecusion principal. (No puede llegarse a esa linea)
breakpoints
# alias: bpclear 1clearallcontinue
# alias: cnext
# alias: nstep
# alias: sPuede usarse como next
stepout
# alias: sorestart
# alias: rprint
# alias: plocalsfuncsexaminemem 0xc00007de28
# alias: xset x = 11whatis xdisassemble
# alias: disassgoroutines
# alias: grsgoroutine 6
# alias: grthreadsthread 6
# alias: trDelve no puede ver el codigo fuente del programa ya que es un binario, lo que hace es mostrar el contenido de los archivos ubicados en la ruta donde fue compilado dicho programa.
Esto puede hacerlo porque internamente el binario contiene como metadata la
ruta original de compilacion, esto es demostrable al realizar una busqueda
con grep de la ruta absoluta dentro del binario.
Tambien se puede comprobar esto al modificar una parte del codigo fuente que se esta visualizando con Delve, podra ver el cambio en tiempo real en Delve, pero Delve realmente no reaccionara a estos cambios, por ejemplo... al crear una linea vacia en el codigo fuente que antes si era una linea del statement, veras que Delve si se puede posicionar en esa "linea vacia", porque en antes era una linea del statement valido para el.