return { "mfussenegger/nvim-dap", branch = "master", dependencies ={ "rcarriga/nvim-dap-ui", "nvim-neotest/nvim-nio" }, config = function() local dap = require("dap") local dapui = require("dapui") require("dapui").setup() dap.listeners.before.attach.dapui_config = function() dapui.open() end dap.listeners.before.launch.dapui_config = function() dapui.open() end dap.listeners.before.event_terminated.dapui_config = function() dapui.close() end dap.listeners.before.event_exited.dapui_config = function() dapui.close() end --MAPPINGS vim.keymap.set('n', '', function() require('dap').continue() end) vim.keymap.set('n', '', function() require('dap').terminate() end) vim.keymap.set('n', '', function() require('dap').step_over() end) vim.keymap.set('n', '', function() require('dap').step_into() end) vim.keymap.set('n', '', function() require('dap').step_out() end) vim.keymap.set('n', 'b', function() require('dap').toggle_breakpoint() end) vim.keymap.set('n', 'B', function() require('dap').set_breakpoint() end) vim.keymap.set('n', 'lp', function() require('dap').set_breakpoint(nil, nil, vim.fn.input('Log point message: ')) end) vim.keymap.set('n', 'dr', function() require('dap').repl.open() end) vim.keymap.set('n', 'dl', function() require('dap').run_last() end) vim.keymap.set({'n', 'v'}, 'dh', function() require('dap.ui.widgets').hover() end) vim.keymap.set({'n', 'v'}, 'dp', function() require('dap.ui.widgets').preview() end) vim.keymap.set('n', 'df', function() local widgets = require('dap.ui.widgets') widgets.centered_float(widgets.frames) end) vim.keymap.set('n', 'ds', function() local widgets = require('dap.ui.widgets') widgets.centered_float(widgets.scopes) end) dap.adapters.gdb = { type = "executable", command = "gdb", args = { "--interpreter=dap", "--eval-command", "set print pretty on" } } dap.configurations.c = { { name = "Launch", console = "integratedTerminal", outputMode = "remote", type = "gdb", request = "launch", program = function() return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') end, args = {}, -- provide arguments if needed cwd = "${workspaceFolder}", stopAtBeginningOfMainSubprogram = false, }, { name = "Select and attach to process", console = "integratedTerminal", outputMode = "remote", type = "gdb", request = "attach", program = function() return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') end, pid = function() local name = vim.fn.input('Executable name (filter): ') return require("dap.utils").pick_process({ filter = name }) end, cwd = '${workspaceFolder}' }, { name = 'Attach to gdbserver :1234', console = "integratedTerminal", outputMode = "remote", type = 'gdb', request = 'attach', target = 'localhost:1234', program = function() return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') end, cwd = '${workspaceFolder}' } } dap.configurations.cpp = dap.configurations.c end }