-
-
Notifications
You must be signed in to change notification settings - Fork 42
DAP support cpp
Zeioth edited this page Aug 11, 2023
·
14 revisions
In order to debug your programs, you have to compile them in debug mode as described next
Create a .solution
file in your working directory. Then pass the -g
parameter to the compiler like this
[HELLO WORLD]
entry_point="/path/to/my/entry_point_file/main.cpp"
output="/path/where/the/program/will/be/written/hello_world"
parameters="-g"
That will tell the compiler to compile in debug mode.
Please note that this section has nothing to do with compiler.nvim. I'm documenting this to make your life easier. To debug C++ with DAP you have to:
- Install the
codelldb
adapter usingmason-dap
. - Setup
DAP
for C++
Here you have an example of how to configure DAP for C++
local dap = require("dap")
-- C++
dap.adapters.codelldb = {
type = 'server',
port = "${port}",
executable = {
command = vim.fn.stdpath('data')..'/mason/bin/codelldb',
args = {"--port", "${port}"},
detached = function() if vim.fn.has('win32') == 1 then return false else return true end end,
}
}
dap.configurations.cpp = {
{
name = 'Launch',
type = 'lldb',
request = 'launch',
program = function() -- Ask the user what executable wants to debug
return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/bin/program', 'file')
end,
cwd = '${workspaceFolder}',
stopOnEntry = false,
args = {},
},
}
Compile your program with Build solution
, add a break point to your code, and then run DAP
. You will see something like this.
- Passing
parameters
in a.solution
file is not required anymore, as Compiler.nvim now passes the-g
parameter to the C compiler (g++
) to enable debug mode by default. But if you use a.solution
in your project you will still have to do it manually, as doing that will overwrite the default compiler parameters. - Note that mason installs the debugger for you. You don't need to install any system dependency.
- If you find any issue while configuring DAP, run
:DapSetLogLevel trace
and:DapShowLog
to find the reason.