Go:
Usando um depurador
Como fazer:
Go oferece uma facilidade integrada para depuração chamada delve
. É uma ferramenta de depuração completa que permite executar programas em Go passo a passo, inspecionar variáveis do programa e avaliar expressões.
Para começar, você deve primeiro instalar o delve
. Você pode fazer isso executando:
go get -u github.com/go-delve/delve/cmd/dlv
Agora, vamos depurar um programa Go simples. Considere um programa main.go
:
package main
import "fmt"
func main() {
message := "Depurando em Go"
fmt.Println(message)
}
Para começar a depuração deste programa, abra um terminal no diretório do projeto e execute:
dlv debug
Este comando compila o programa com otimizações desabilitadas (para melhorar a experiência de depuração), inicia-o e anexa um depurador a ele.
Uma vez que o delve
está em execução, você está no shell interativo do depurador. Aqui estão alguns comandos básicos:
break main.main
define um ponto de interrupção na funçãomain
.continue
retoma a execução do programa até que um ponto de interrupção seja atingido.print message
imprimirá o valor da variávelmessage
.next
avança a execução do programa para a próxima linha.quit
sai do depurador.
A saída ao atingir o ponto de interrupção e imprimir a variável pode parecer assim:
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 em Go"
7: fmt.Println(message)
8: }
(dlv) print message
"Depurando em Go"
Usando esses comandos, você pode percorrer seu programa passo a passo, inspecionando o estado à medida que avança para entender como ele se comporta e identificar quaisquer problemas.
Aprofundamento
A escolha do delve
como a ferramenta de depuração de eleição para Go, em vez de ferramentas tradicionais como o GDB (GNU Debugger), deve-se principalmente à natureza do modelo de execução e do tempo de execução do Go. O GDB não foi inicialmente projetado com o tempo de execução do Go em mente, tornando o delve
uma escolha mais adequada para desenvolvedores em Go. Delve
é projetado especificamente para Go, oferecendo uma experiência de depuração mais intuitiva para rotinas Go, canais e outros construtos específicos do Go.
Além disso, delve
suporta uma ampla gama de recursos além daqueles oferecidos pelo GDB básico ao trabalhar com programas Go. Estes incluem, mas não estão limitados a: anexar a processos em execução para depuração; pontos de interrupção condicionais; e avaliar expressões complexas que podem envolver primitivos de concorrência do Go.
Embora delve
seja o depurador preferido de muitos desenvolvedores Go, vale ressaltar que a cadeia de ferramentas Go também inclui formas mais leves de suporte à depuração, como a ferramenta integrada pprof
para perfilamento e a ferramenta trace
para visualização de concorrência. Essas ferramentas às vezes podem fornecer uma via mais rápida ou de nível mais alto para diagnosticar problemas de desempenho do programa ou bugs de concorrência, o que pode ser complementar ou até preferível, dependendo do contexto de depuração.