DEV Community

Cover image for Debugando Rust no VS Code
Roger Torres (he/him/ele)
Roger Torres (he/him/ele)

Posted on

Debugando Rust no VS Code

Versão em inglês aqui.

Bem no começo da minha carreira (2008), consegui um trampo de desenvolvedor Oracle PL/SQL. Eu ainda não sei bem o porquê, mas a gente não usava qualquer debugger na época. Pra corrigir os bugs, a guriada adicionava mensagens pelo código, tentando isolar o problema. Os mais safos fazia algo como uma "busca binária", criando mensagens a cada 100 linhas (ex.: entre as linhas 300 e 400), descobrindo entre quais linhas estava o problema e, então, refinavam a busca, colocando mensagens a cada 10 linhas (ex.: 310, 320 e assim vai).

Quando eu deixei de trabalhar com Oracle e passei a trablhar com SAP (que tem um debugger fantástico) eu descobri um mundo novo. Então, quando chegou a hora de eu trocar de tecnologia de novo (para Rust), eu fui imediatamente atormentado pela pergunta: "eu vou ter debugger lá?"

Essa é a resposta que eu encontrei.


O que te trouxe aqui: debugando Rust no VSCode

Primeiro, você precisa de uma extensão:

  • Usando Unix (Mac, Linux, ...)? Baixe CodeLLDB
  • Usando Windows? Baixe C/C++

Por que você precisa disso??

  • Resposta curta: O compilador do Rust usa LLVM para interagir com a máquina, e estas extensões permitem que você interaja com o código que roda nesse nível (já que, cê sabe, o Rust é compilado).
  • Resposta longa: Ai você me complica. Dá uma olhada nesse site aqui (em inglês).

Agora, no seu VSCode, siga esses passos (o meu VSCode tá em inglês, mas acho que é tranquilo pra você se achar, caso o seu esteja em pt-brazuca): Run > Start Debugging > Ok > Yes
First step

Second step

Third step

O resultado esperado é a criação do arquivo /.vscode/launch.json que se parece algo com isso:

// Arquivo copiado de um MacOS X
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "lldb",
            "request": "launch",
            "name": "Debug unit tests in library 'yourprogram'",
            "cargo": {
                "args": [
                    "test",
                    "--no-run",
                    "--lib",
                    "--package=yourprogram"
                ],
                "filter": {
                    "name": "yourprogram",
                    "kind": "lib"
                }
            },
            "args": [],
            "cwd": "${workspaceFolder}"
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

Ou isso, se você estiver no Windows:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(Windows) Launch",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceRoot}/target/debug/yourprogram.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "console": "externalTerminal"
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

Se por algum motivo os arquivos não forem criados para você, podes copiar e colar (a pasta .vscode fica no mesmo nível da pasta src).

Além do fato de os exemplos serem de SOs diferentes, o primeiro exemplo é de um programa com biblioteca (library crate; --lib), já o segundo é com binário (binary crate; --bin). Se você tiver os dois no mesmo projeto, você poderá ter duas ou três entradas em configurations.

Agora, teoricamente, você será capaz de adicionar um breakpoint no seu código (clicando na coluna da esquerda para criar esse ponto vermelho).Fourth StepSe você não consegue criar o breakpoint, provavelmente é porque você está com essa opção desativada. Para resolver isso, vá em Configurações (Settings) e selecione Debug (no meu caso, está debaixo de Features—mas você pode digitar "breakpoint" na barra de busca para encontrá-lo rapidamente) e habilite a opção "Allow Breakpoints Everywhere" ("Permitir Pontos de Parada em Todos os Lugares", ou coisa parecida).Allow Breakpoints Everywhere

Com os breakpoints acionados, aperte F5 ou Run > Start Debugging (que deve funcionar agora que você tem o arquivo). O resultado deve ser algo assim:Fifth Step

Basicamente, na esquerda, você tem os valores carregados na memória. As coisas são bem simples enquanto você está lidando com tipos como estes inteiros que eu tenho aqui, mas podem ficar complicadas se você estiver debugando um código com coisas como HashMaps. De qualquer forma, bem melhor que nada.

Não funcionou? Bom, não vai ser a primeira vez que alguém segue um tutorial na internet e não dá certo, né :) Mas comenta aí (mesmo se você tiver resolvido sozinho), porque há grandes chances de outra pessoa ter um problema similar.

Ações do Debugger

ActionsPra finalizar, essas são as ações que o debugger te permite (da esquerda pra direita):

  • F5 Continue: executa o programa até ele alcançar o próximo breakpoint (ou até o fim, se ele não achar nenhum).
  • F10 Step Over: Executa o próximo passo sem entrar nele; por exemplo, se for uma função, ele executa toda ela sem entrar nela.
  • F11 Step Into: Executa o próximo passo, mas, ao contrário do F10, entra no subprocesso.
  • Shift+F11 Step out: Executa o código até ir para um nível acima; por exemplo, se estiver numa função, ele executa tudo até chegar no código que chamou a função.
  • Shift+Cmd/Ctrl+F5 Restart: Executa tudo do começo.
  • Shift+F5 Stop: Interrompe a execução.

E é isso. Agora você já é mais safo que a guriada do meu primeiro emprego.

A foto da capa é do Danilo Batista.

Top comments (0)