Open tapyu opened 2 years ago
Still hoping one day this will happen.
I just merged a PR that implements the actual DAP, not our own home-grown JSON-RPC version of it. So, in principle this should now be feasible. In practice I expect that the API for using things will see some churn in the next couple of weeks before things settle down a bit.
I'm building a neovim dap plugin, and I'm using an adapted version of this script:
using Sockets
using DebugAdapter
using Logging
function start_debugger()
server_port = parse(Int, ARGS[1])
server = Sockets.listen(server_port)
conn = Sockets.accept(server)
debugsession = DebugAdapter.DebugSession(conn)
run(debugsession)
close(conn)
end
start_debugger()
However, I get this error and the debugger script crashes.
[debug-adapter stderr] ERROR:
[debug-adapter stderr] KeyError: key
[debug-adapter stderr] "
[debug-adapter stderr] program" not found
[debug-adapter stderr]
Stacktrace:
[debug-adapter stderr]
[1] getindex
@ ./dict.jl:498 [inlined]
[2]
[debug-adapter stderr] DebugAdapter.LaunchArguments(dict::Dict{String, Any})
[debug-adapter stderr]
@ DebugAdapter ~/.julia/packages/DebugAdapter/NSeaJ/src/DAPRPC/interface_def.jl:63
[3] dispatch_msg(x::DebugAdapter.DAPRPC.DAPEndpoint{TCPSocket, TCPSocket}, dispatcher::DebugAdapter.DAPRPC.MsgDispatcher, msg::Dict{String, Any})
@ DebugAdapter.DAPRPC
[debug-adapter stderr] ~/.julia/packages/DebugAdapter/NSeaJ/src/DAPRPC/typed.jl:86
[4]
[debug-adapter stderr] (::DebugAdapter.var"#132#161"{Dict{String, Any}, Nothing, DebugAdapter.DAPRPC.MsgDispatcher, DebugAdapter.DAPRPC.DAPEndpoint{TCPSocket, TCPSocket}})()
[debug-adapter stderr]
@ DebugAdapter ~/.julia/packages/DebugAdapter/NSeaJ/src/packagedef.jl:105
Here's the full log from nvim-dap
:
[ DEBUG ] 2024-06-28T23:57:15Z-0400 ] ...s/kd/.local/share/nvim/lazy/nvim-dap/lua/dap/session.lua:1154 ] "Starting debug adapter server executable" {
args = { "--project=/Users/kd/gitrepos/nvim-dap-julia", "/Users/kd/gitrepos/nvim-dap-julia/scripts/server.jl", "65396" },
command = "julia"
}
[ DEBUG ] 2024-06-28T23:57:15Z-0400 ] ...s/kd/.local/share/nvim/lazy/nvim-dap/lua/dap/session.lua:1286 ] "Debug adapter server executable started, listening on 65396"
[ DEBUG ] 2024-06-28T23:57:15Z-0400 ] ...s/kd/.local/share/nvim/lazy/nvim-dap/lua/dap/session.lua:1289 ] "Connecting to debug adapter" {
executable = {
args = { "--project=/Users/kd/gitrepos/nvim-dap-julia", "/Users/kd/gitrepos/nvim-dap-julia/scripts/server.jl", "65396" },
command = "julia"
},
options = {
max_retries = 100
},
port = 65396,
type = "server"
}
[ DEBUG ] 2024-06-28T23:57:16Z-0400 ] ...s/kd/.local/share/nvim/lazy/nvim-dap/lua/dap/session.lua:1664 ] "request" {
arguments = {
adapterID = "nvim-dap",
clientID = "neovim",
clientName = "neovim",
columnsStartAt1 = true,
linesStartAt1 = true,
locale = "en_US.UTF-8",
pathFormat = "path",
supportsProgressReporting = true,
supportsRunInTerminalRequest = true,
supportsStartDebuggingRequest = true,
supportsVariableType = true
},
command = "initialize",
seq = 1,
type = "request"
}
[ DEBUG ] 2024-06-28T23:57:17Z-0400 ] ...s/kd/.local/share/nvim/lazy/nvim-dap/lua/dap/session.lua:942 ] 1 {
body = {
additionalModuleColumns = {},
exceptionBreakpointFilters = { {
default = true,
filter = "error",
label = "Uncaught Exceptions"
}, {
default = false,
filter = "throw",
label = "All Exceptions"
} },
supportedChecksumAlgorithms = {},
supportsCompletionsRequest = false,
supportsConditionalBreakpoints = true,
supportsConfigurationDoneRequest = true,
supportsDataBreakpoints = false,
supportsEvaluateForHovers = true,
supportsExceptionInfoRequest = true,
supportsFunctionBreakpoints = true,
supportsHitConditionalBreakpoints = false,
supportsLogPoints = false,
supportsRestartFrame = true,
supportsSetVariable = true,
supportsStepBack = false,
supportsStepInTargetsRequest = true,
supportsTerminateRequest = true
},
command = "initialize",
request_seq = 1,
seq = 1,
success = "true",
type = "response"
}
[ DEBUG ] 2024-06-28T23:57:17Z-0400 ] ...s/kd/.local/share/nvim/lazy/nvim-dap/lua/dap/session.lua:1664 ] "request" {
arguments = {
args = {},
debugAutoInterpretAllModules = false,
exitAfterTaskReturns = false,
name = "Debug julia executable",
projectDir = "/Users/kd/gitrepos/nvim-dap-julia",
request = "launch",
type = "julia"
},
command = "launch",
seq = 2,
type = "request"
}
[ DEBUG ] 2024-06-28T23:57:22Z-0400 ] ...s/kd/.local/share/nvim/lazy/nvim-dap/lua/dap/session.lua:1664 ] "request" {
arguments = vim.empty_dict(),
command = "terminate",
seq = 3,
type = "request"
}
It turns out I had to pass a program
to the configuration. Now I get a different error:
[debug-adapter stderr] ERROR:
[debug-adapter stderr] MethodError: no method matching activate(::Missing)
Closest candidates are:
activate(; temp, shared, prev, io)
@ Pkg ~/.julia/juliaup/julia-1.10.4+0.aarch64.apple.darwin14/share/julia/stdlib/v1.10/Pkg/src/API.jl:1896
activate(!Matched::Function, !Matched::AbstractString)
@ Pkg ~/.julia/juliaup/julia-1.10.4+0.aarch64.apple.darwin14/share/julia/stdlib/v1.10/Pkg/src/API.jl:1976
activate(!Matched::AbstractString; shared, temp, io)
@ Pkg ~/.julia/juliaup/julia-1.10.4+0.aarch64.apple.darwin14/share/julia/stdlib/v1.10/Pkg/src/API.jl:1932
[debug-adapter stderr]
Stacktrace:
[debug-adapter stderr]
[1] launch_request(debug_session::DebugAdapter.DebugSession, params::DebugAdapter.LaunchArguments)
@ DebugAdapter ~/.julia/packages/DebugAdapter/NSeaJ/src/debugger_requests.jl:54
[2]
[debug-adapter stderr] (::DebugAdapter.var"#129#158"{DebugAdapter.DebugSession})(params::DebugAdapter.LaunchArguments)
[debug-adapter stderr]
@ DebugAdapter ~/.julia/packages/DebugAdapter/NSeaJ/src/packagedef.jl:99
[3]
[debug-adapter stderr] dispatch_msg(x::DebugAdapter.DAPRPC.DAPEndpoint{TCPSocket, TCPSocket}, dispatcher::DebugAdapter.DAPRPC.MsgDispatcher, msg::Dict{String, Any})
@ DebugAdapter.DAPRPC ~/.julia/packages/DebugAdapter/NSeaJ/src/DAPRPC/typed.jl:89
[4] (::DebugAdapter.var"#132#161"{Dict{String, Any}, Nothing, DebugAdapter.DAPRPC.MsgDispatcher, DebugAdapter.DAPRPC.DAPEndpoint{TCPSocket, TCPSocket}})()
@ DebugAdapter
[debug-adapter stderr]
[debug-adapter stderr] ~/.julia/packages/DebugAdapter/NSeaJ/src/packagedef.jl:105
[debug-adapter stderr]
I hardcoded juliaEnv
into the requests with the current workspace and now I get this error:
[debug-adapter stderr] Activating
[debug-adapter stderr] project at `~/gitrepos/nvim-dap-julia`
[debug-adapter stderr] ERROR:
[debug-adapter stderr] MethodError: Cannot `convert` an object of type Missing to an object of type Bool
[debug-adapter stderr]
Closest candidates are:
convert(::Type{T}, !Matched::T) where T<:Number
@ Base number.jl:6
convert(::Type{T}, !Matched::T) where T
@ Base Base.jl:84
convert(::Type{T}, !Matched::Number) where T<:Number
@ Base number.jl:7
...
[debug-adapter stderr]
Stacktrace:
[debug-adapter stderr]
[1] setproperty!(x::DebugAdapter.DebugSession, f::Symbol, v::Missing)
@ Base ./Base.jl:40
[2] launch_request(debug_session::DebugAdapter.DebugSession, params::DebugAdapter.LaunchArguments)
@ DebugAdapter
[debug-adapter stderr] ~/.julia/packages/DebugAdapter/NSeaJ/src/
[debug-adapter stderr] debugger_requests.jl:104
[debug-adapter stderr]
[debug-adapter stderr]
[debug-adapter stderr] [3]
[debug-adapter stderr]
[debug-adapter stderr] (::DebugAdapter.var"#129#158"{DebugAdapter.DebugSession})(params::DebugAdapter.LaunchArguments)
[debug-adapter stderr]
@ DebugAdapter ~/.julia/packages/DebugAdapter/NSeaJ/src/packagedef.jl:99
[4] dispatch_msg(x::DebugAdapter.DAPRPC.DAPEndpoint{TCPSocket, TCPSocket}, dispatcher::DebugAdapter.DAPRPC.MsgDispatcher, msg::Dict{String, Any})
@ DebugAdapter.DAPRPC
[debug-adapter stderr] ~/.julia/packages/DebugAdapter/NSeaJ/src/DAPRPC/typed.jl:89
[5] (::DebugAdapter.var"#132#161"{Dict{String, Any}, Nothing, DebugAdapter.DAPRPC.MsgDispatcher, DebugAdapter.DAPRPC.DAPEndpoint{TCPSocket, TCPSocket}})()
@ DebugAdapter ~/.julia/packages/DebugAdapter/NSeaJ/src/packagedef.jl:105
I set stopOnEntry = true
and now I have a version that works with neovim:
https://github.com/julia-vscode/DebugAdapter.jl/assets/1813121/a30828e8-2b4d-4ea0-b1eb-6e9cc3653c8f
I made the repo public: https://github.com/kdheepak/nvim-dap-julia
It segfaults when it finishes running the server but otherwise seems to work. I haven't tested a lot of features yet.
I am trying to integrate Julia's DAP with Debug Adapter Protocol client implementation for Neovim. You must to configure the DAP for each specific language. I've tried to do so using some references for other languages, but it failed...
I am not an expert with regard Debug Adapter Protocol and how to handle then, and the source for doing that with
Julia
are scarce. Anyone can give some help?Thank you.