Meu nome é Elton Minetto

Debug de aplicações Go com o Goland e VSCode

Essa é uma dica rápida mas que pode ser útil para mais pessoas. Recentemente precisei fazer debug de uma aplicação CLI que estou desenvolvendo e foi necessário algumas configurações nas IDEs que uso para fazer esse processo. Como dediquei mais de 30 minutos para aprender isso espero que este post econimize algum tempo de alguém ;)

Goland

O primeiro exemplo é como configurar o debug na IDE da Jetbrains.

Primeiro precisamos fazer o build da aplicação usando alguns parâmetros extras. Para os exemplos vou usar

go build -o bin/sorteador -gcflags='-N -l' main.go

É preciso executar o programa via dlv. Dado o comando que seria executado da seguinte forma:

./bin/sorteador -num 10 -file participantes.csv

Deve ser executado assim:

 dlv --listen=:2345 --headless=true --api-version=2 exec ./bin/sorteador -- -num 10 -file participantes.csv

No Goland, basta ir em RunDebug . Clicar em Edit configurations. Clicar no + e escolher Go Remote:

goland_debug_config.png

Ao clicar em Debug o código vai parar no breakpoint que foi definido ao clicar na linha esperada. Exemplo:

goland_debug.png

As próximas vezes basta clicar em Run-> Debug 'Debug using dlv'

VSCode

No VSCode é preciso clicar em ExecutarAbrir as Configurações ou Adicionar Configuração caso você não tenha nenhuma já criada. Criar/alterar o launch.json com o seguinte código:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Connect to server",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "main.go",
            "args": [
                "-num",
                "10",
                "-file",
                "participantes.csv"
            ]
        }
    ]
}

Basta salvar o arquivo e clicar em Executar-> Iniciar a depuração. A execução vai parar no breakpoint definido no código:

vscode_debug.png

Espero que essa dica simples ajude a usar este recurso tão útil.

P.S.: Obrigado Leo Cavalcante pela ajuda na configuração do VSCode.