1
0
mirror of https://github.com/containers/bootc.git synced 2026-02-05 15:45:53 +01:00
Files
bootc/hack/lldb/dap-example-vim.lua
Chris Kyrouac 7ec44f6a0b hack: Add remote lldb utilities to hack dir
This is useful for remote debugging bootc running in a VM.

Until podman-bootc has support for forwarding arbitrary ports,
this custom solution is needed.

Signed-off-by: Chris Kyrouac <ckyrouac@redhat.com>
2024-06-11 10:21:59 -04:00

123 lines
3.8 KiB
Lua

-- This is an example of how to configure the DAP connection in an editor (neovim in this case)
-- It should be relatively straightforward to adapt to a different editor
local dap = require("dap")
local job = require("plenary.job")
-- This is a coroutine that runs the cargo build command and reports progress
local program = function()
return coroutine.create(function(dap_run_co)
local progress = require("fidget.progress")
local cargo_build_fidget = progress.handle.create({
title = "cargo build",
lsp_client = { name = "Debugger" },
percentage = 0,
})
local cargo_build_job = job:new({
command = "cargo",
args = { "build", "--color=never", "--profile=dev" },
cwd = vim.fn.getcwd(),
enable_handlers = true,
on_stderr = vim.schedule_wrap(function(_, output)
cargo_build_fidget:report({
message = output,
percentage = cargo_build_fidget.percentage + 0.3,
})
end),
on_exit = function(_, return_val)
vim.schedule(function()
if return_val ~= 0 then
cargo_build_fidget:report({
message = "Error during cargo build",
percentage = 100,
})
else
cargo_build_fidget:finish()
coroutine.resume(dap_run_co, vim.fn.getcwd() .. "/target/debug/bootc")
end
end)
end,
})
cargo_build_job:start()
end)
end
dap.adapters = {
lldb = {
executable = {
args = {
"--liblldb",
"~/.local/share/nvim/mason/packages/codelldb/extension/lldb/lib/liblldb.so",
"--port",
"${port}",
},
command = "~/.local/share/nvim/mason/packages/codelldb/extension/adapter/codelldb",
},
host = "127.0.0.1",
port = "${port}",
type = "server",
},
}
-- rust config that runs cargo build before opening dap ui and starting Debugger
-- shows cargo build status as fidget progress
-- the newly built bootc binary is copied to the VM and run in the lldb-server
dap.configurations.rust = {
{
args = { "status" },
cwd = "/",
name = "[remote] status",
program = program,
request = "launch",
console = "integratedTerminal",
stopOnEntry = false,
type = "lldb",
initCommands = {
"platform select remote-linux",
"platform connect connect://bootc-lldb:1234", -- connect to the lldb-server running in the VM
"file target/debug/bootc",
},
},
{
args = { "upgrade" },
cwd = "/",
name = "[remote] upgrade",
program = program,
request = "launch",
console = "integratedTerminal",
stopOnEntry = false,
type = "lldb",
initCommands = {
"platform select remote-linux",
"platform connect connect://bootc-lldb:1234",
"file target/debug/bootc",
},
},
-- The install command can connect to a container instead of a VM.
-- The following command is an example of how to run a container and start a lldb-server:
-- sudo podman run --pid=host --network=host --privileged --security-opt label=type:unconfined_t -v /var/lib/containers:/var/lib/containers -v /dev:/dev -v .:/output localhost/bootc-lldb lldb-server platform --listen "*:1234" --server
{
args = { "install", "to-disk", "--generic-image", "--via-loopback", "--skip-fetch-check", "~/.cache/bootc-dev/disks/test.raw" },
cwd = "/",
env = {
["RUST_LOG"] = "debug",
["BOOTC_DIRECT_IO"] = "on",
},
name = "[remote] install to-disk",
program = program,
request = "launch",
console = "integratedTerminal",
stopOnEntry = false,
type = "lldb",
initCommands = {
"platform select remote-linux",
"platform connect connect://127.0.0.1:1234", -- connect to the lldb-server running in the container
"file target/debug/bootc",
},
},
}