NeoVim Termdebug Config
For init.lua file:
.lua
-- Debugger ===================================================================
vim.api.nvim_create_autocmd("CmdlineEnter", {
callback = function()
local cmd = vim.fn.getcmdline()
if vim.fn.exists(":Termdebug") == 0 then
vim.cmd("packadd termdebug")
end
end,
})
vim.g.termdebug_config = {
disasm_window = true,
variables_window = true,
wide = 10,
disasm_window = 15,
variables_window = 15,
command = {
"gdb", "-nx",
"-ex", "set breakpoint pending on",
"-ex", "set disassembly-flavor intel",
"-ex", "set confirm off",
"-ex", "set print pretty on",
}
}
local termdebug_keys = {
{ "n", "<leader>dr", ":call TermDebugSendCommand('run')<CR>", "[d]ebugger [r]un" },
{ "n", "<leader>dc", ":call TermDebugSendCommand('continue')<CR>", "[d]ebugger [c]ontinue" },
{ "n", "<leader>de", ":call TermDebugSendCommand('exit')<CR>", "[d]ebugger [e]xit" },
{ "n", "<leader>dk", ":call TermDebugSendCommand('kill')<CR>", "[d]ebugger [k]ill" },
{ "n", "<leader>db", ":Break<CR>", "[d]ebugger [b]reakpoint" },
{ "n", "<leader>du", ":Clear<CR>", "[d]ebugger [u]nbreakpoint" },
{ "n", "<leader>dt", ":Tbreak<CR>", "[d]ebugger [t]reak" },
{ "n", "<leader>dc", ":Continue<CR>", "[d]ebugger [c]ontinue" },
{ "n", "<leader>dgg", ":Gdb<CR>", "[d]ebugger [g]oto [g]db" },
{ "n", "<leader>dgp", ":Program<CR>", "[d]ebugger [g]oto [p]rogram" },
{ "n", "<leader>dgs", ":Source<CR>", "[d]ebugger [g]oto [s]ource" },
{ "n", "<leader>dga", ":Asm<CR>", "[d]ebugger [g]oto [a]ssembly" },
{ "n", "<leader>dgl", ":Var<CR>", "[d]ebugger [g]oto [l]ocal watchlist" },
{ "n", "<F1>", ":Over<CR>", "Debugger Next" },
{ "n", "<F2>", ":Step<CR>", "Debugger Step" },
{ "n", "=", ":Up<CR>", "Debugger go Up frame" },
}
local current_debug_edit_file=""
vim.api.nvim_create_autocmd("User", {
pattern = "TermdebugStartPre",
callback = function()
for _, k in ipairs(termdebug_keys) do
keymap_set(k[1], k[2], k[3], k[4])
end
current_debug_edit_file=vim.api.nvim_buf_get_name(0)
vim.cmd.tabnew()
end,
})
vim.api.nvim_create_autocmd("User", {
pattern = "TermdebugStartPost",
callback = function()
vim.cmd("Gdb")
vim.cmd("wincmd K")
vim.cmd("Source")
vim.cmd.edit(current_debug_edit_file)
vim.cmd("wincmd K")
vim.cmd.resize(30)
vim.cmd("Program")
vim.cmd.resize(15)
vim.cmd("Asm")
vim.cmd.resize(6)
vim.cmd("Source")
end,
})
vim.api.nvim_create_autocmd("User", {
pattern = "TermdebugStopPre",
callback = function()
vim.cmd("Source")
current_debug_edit_file=vim.api.nvim_buf_get_name(0)
vim.cmd("Gdb")
vim.cmd("Bd")
end,
})
vim.api.nvim_create_autocmd("User", {
pattern = "TermdebugStopPost",
callback = function()
for _, k in ipairs(termdebug_keys) do
pcall(vim.keymap.del, k[1], k[2])
end
vim.cmd.tabclose()
vim.cmd.edit(current_debug_edit_file)
end,
})
For .nvim.lua file
.lua
-- ak: Setup Termdebug
-- ============================================================================
local program_name_debug = build_dir.."/cope_debug"
local termdebug_config = vim.g.termdebug_config or {}
termdebug_config.command = {
"gdb", "-nx",
"-ex", "set breakpoint pending on",
"-ex", "set disassembly-flavor intel",
"-ex", "set confirm off",
"-ex", "set print pretty on",
program_name_debug
}
vim.g.termdebug_config = termdebug_config
vim.api.nvim_create_autocmd("User", {
pattern = "TermdebugStartPost",
callback = function()
vim.keymap.set("n", "<leader>dr", ":call TermDebugSendCommand('dr')<CR>", { desc = "[d]ebugger [r]un" })
vim.cmd('cexpr system("' .. cc_command .. 'build-debugger --nocolor")')
vim.fn.TermDebugSendCommand('define dr')
vim.fn.TermDebugSendCommand(' shell '..cc_command.."build-debugger")
vim.fn.TermDebugSendCommand(' file '..program_name_debug)
vim.fn.TermDebugSendCommand(' run')
vim.fn.TermDebugSendCommand('end')
end,
})