DAP Debugging
Definição curta: Tutorial para configurar o DAP (Debug Adapter Protocol) no Neovim para debugging de código com breakpoints, variáveis e stack traces.
Antes de começar
- Neovim v0.11 ou mais recente instalado — confira com
nvim --version - Um
init.luaque já carrega, ainda que vazio
O que você vai aprender
- Explicar Plugins necessários com suas palavras
- Explicar Configuração básica com suas palavras
- Explicar Breakpoints com suas palavras
- Localizar o assunto desta página no
:helpdo seu próprio Neovim
O que é
DAP é um protocolo para debugging que permite ao Neovim se comunicar com debug adapters de diferentes linguagens. O nvim-dap é a implementação em Lua.
Índice de sub-tópicos
Plugins necessários
-- plugins/dap.lua
return {
"mfussenegger/nvim-dap",
dependencies = {
"rcarriga/nvim-dap-ui", -- UI para DAP
"theHamsta/nvim-dap-virtual-text", -- Virtual text
},
}Configuração básica
-- setup/dap.lua
local dap = require("dap")
local dapui = require("dapui")
dapui.setup()
dap.listeners.after.event_initialized["dapui_config"] = function()
dapui.open()
endBreakpoints
-- Breakpoint simples
vim.keymap.set("n", "<leader>b", dap.toggle_breakpoint)
-- Breakpoint condicional: para só quando a expressão for verdadeira
vim.keymap.set("n", "<leader>B", function()
dap.set_breakpoint(vim.fn.input("Condição do breakpoint: "))
end)Navegação de debug
O nvim-dap não define atalho nenhum por padrão — a documentação dele diz isso com todas as letras, para não colidir com o mapeamento de quem instala. As teclas abaixo são a convenção que a maioria dos exemplos usa, mas só existem depois que você as mapeia:
vim.keymap.set("n", "<F5>", dap.continue)
vim.keymap.set("n", "<F6>", dap.pause)
vim.keymap.set("n", "<F9>", dap.toggle_breakpoint)
vim.keymap.set("n", "<F10>", dap.step_over)
vim.keymap.set("n", "<F11>", dap.step_into)
vim.keymap.set("n", "<F12>", dap.step_out)| Tecla (depois de mapeada) | Função |
|---|---|
<F5> | dap.continue() — inicia ou continua |
<F6> | dap.pause() |
<F9> | dap.toggle_breakpoint() |
<F10> | dap.step_over() |
<F11> | dap.step_into() |
<F12> | dap.step_out() |
Exemplo Lua
-- Configurar debug para Lua (ZeroBrane ou lokit)
dap.adapters.lua = {
type = "server",
host = "127.0.0.1",
port = 8172,
}Exemplo Python
-- Python debug com debugpy
dap.adapters.python = {
type = "executable",
command = "python",
args = { "-m", "debugpy.adapter" },
}Você aprendeu
- Plugins necessários
- Configuração básica
- Breakpoints
- Navegação de debug
- Exemplo Lua
Perguntas para reflexão
- O que Plugins necessários resolve, e o que se perde sem isso?
- O que Configuração básica resolve, e o que se perde sem isso?
- O que Breakpoints resolve, e o que se perde sem isso?
- Qual parte desta página você conseguiria reproduzir sem consultar, direto no editor?
Artigos relacionados
Veja também
- Configuração LSP — LSP integration
- Configuração Python — LSP para Python
Referências
- nvim-dap — Repositório oficial
- DAP Protocol — Especificação do protocolo