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:
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
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}"
}
]
}
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"
}
]
}
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).Se 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).
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:
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
Pra 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)