-
I'm setting up Neovim as an IDE for the first time and I got stuck trying to setup debugging in OCaml. I have general OCaml environment setup in the system, I can build and run projects. LSP and none-ls in Neovim are configured and working fine. I created a new Hello World project with
I built it with I can launch debugging and step over the code. But breakpoints appear as rejected and debug doesn't hit them. I only get this in
I pretty much copied this plugin config and added setup for return {
"mfussenegger/nvim-dap",
dependencies = {
-- Creates a beautiful debugger UI
"rcarriga/nvim-dap-ui",
-- Required dependency for nvim-dap-ui
"nvim-neotest/nvim-nio",
-- Installs the debug adapters for you
-- 'williamboman/mason.nvim',
"jay-babu/mason-nvim-dap.nvim",
"hackwaly/ocamlearlybird",
},
keys = function(_, keys)
local dap = require("dap")
local dapui = require("dapui")
return {
-- Basic debugging keymaps, feel free to change to your liking!
{ "<F5>", dap.continue, desc = "Debug: Start/Continue" },
{ "<F1>", dap.step_into, desc = "Debug: Step Into" },
{ "<F2>", dap.step_over, desc = "Debug: Step Over" },
{ "<F3>", dap.step_out, desc = "Debug: Step Out" },
{ "<leader>b", dap.toggle_breakpoint, desc = "Debug: Toggle Breakpoint" },
{
"<leader>B",
function()
dap.set_breakpoint(vim.fn.input("Breakpoint condition: "))
end,
desc = "Debug: Set Breakpoint",
},
-- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception.
{ "<F7>", dapui.toggle, desc = "Debug: See last session result." },
unpack(keys),
}
end,
config = function()
local dap = require("dap")
local dapui = require("dapui")
require("mason-nvim-dap").setup({
-- Makes a best effort to setup the various debuggers with
-- reasonable debug configurations
automatic_installation = true,
-- You can provide additional configuration to the handlers,
-- see mason-nvim-dap README for more information
handlers = {},
})
-- Dap UI setup
-- For more information, see |:help nvim-dap-ui|
dapui.setup({
-- Set icons to characters that are more likely to work in every terminal.
-- Feel free to remove or use ones that you like more! :)
-- Don't feel like these are good choices.
icons = { expanded = "▾", collapsed = "▸", current_frame = "*" },
controls = {
icons = {
pause = "⏸",
play = "▶",
step_into = "⏎",
step_over = "⏭",
step_out = "⏮",
step_back = "b",
run_last = "▶▶",
terminate = "⏹",
disconnect = "⏏",
},
},
})
-- dap.listeners.after.event_initialized["dapui_config"] = dapui.open
-- dap.listeners.before.event_terminated["dapui_config"] = dapui.close
-- dap.listeners.before.event_exited["dapui_config"] = dapui.close
dap.adapters.ocamlearlybird = {
type = "executable",
command = "ocamlearlybird",
args = { "debug" },
}
dap.configurations.ocaml = {
{
type = "ocamlearlybird",
request = "launch",
name = "Launch debug test",
-- console = "integratedTerminal",
-- program = "_build/default/${relativeFileDirname}/${fileBasenameNoExtension}.bc",
program = "_build/default/bin/main.bc",
cwd = "${workspaceFolder}",
stopOnEntry = true,
yieldSteps = 4096,
onlyDebugGlob = "<${workspaceFolder}/**/*>",
},
}
end,
}
What am I missing here? |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
Okay, I found this webpage which describes how does ocamldebug actually work and now I see it counts events and not lines like I expected coming from more popular languages. I've added some more calls to my example code and breakpoints do actually work. I'll need to learn some OCaml. |
Beta Was this translation helpful? Give feedback.
Okay, I found this webpage which describes how does ocamldebug actually work and now I see it counts events and not lines like I expected coming from more popular languages.
I've added some more calls to my example code and breakpoints do actually work. I'll need to learn some OCaml.