使用nvim-dap远程调试Java时出现连接被拒绝的问题排查
Neovim中nvim-dap Java远程调试连接被拒绝问题
错误信息
Error 09:21:30 notify.error DAP Error on attach: Failed to attach to remote debuggee VM. Reason: java.net.ConnectException: Connection refused
Neovim配置
使用LazyVim的lang.java扩展插件,nvim-dap配置如下:
{ "mfussenegger/nvim-dap", optional = true, opts = function() local dap = require("dap") dap.configurations.java = { { type = "java", request = "attach", name = "Debug (Attach) - Remote", hostName = "127.0.0.1", port = 5005, }, } end, dependencies = { { "williamboman/mason.nvim", opts = { ensure_installed = { "java-debug-adapter", "java-test" } }, }, }, }
已尝试操作
手动通过以下命令启动JVM后,再附加调试器可正常工作:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -cp bin exemplo.Autodromo
此时JVM输出:
Listening for transport dt_socket at address: 5005
但直接在Neovim中启动调试则出现连接被拒绝错误。
问题分析与解决方案
错误原因
当前配置的是**attach(附加)**调试模式,该模式的核心前提是:目标Java进程必须已经以调试模式启动,并在指定端口(5005)监听调试连接。直接启动调试时,没有符合条件的Java进程在运行,因此会触发连接拒绝错误。
实现自动启动调试的配置调整
如果想让nvim-dap无需手动执行java命令,自动启动Java进程并附加调试,需要改用**launch(启动)**模式。修改nvim-dap的Java配置,添加launch类型的配置项:
{ "mfussenegger/nvim-dap", optional = true, opts = function() local dap = require("dap") dap.configurations.java = { -- 原有的附加模式配置 { type = "java", request = "attach", name = "Debug (Attach) - Remote", hostName = "127.0.0.1", port = 5005, }, -- 新增的启动模式配置 { type = "java", request = "launch", name = "Debug (Launch) - Main Class", mainClass = function() -- 手动输入主类全限定名,比如exemplo.Autodromo return vim.fn.input("Enter main class: ") end, classPaths = {"./bin"}, -- 替换为你的项目类路径 vmArgs = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" }, } end, dependencies = { { "williamboman/mason.nvim", opts = { ensure_installed = { "java-debug-adapter", "java-test" } }, }, }, }
配置说明
request = "launch":告诉nvim-dap主动启动Java进程mainClass:指定要运行的Java主类全限定名,这里用输入框让你手动输入,也可以结合nvim-jdtls自动获取项目主类classPaths:设置项目的类路径,比如编译后的bin目录或依赖jar包路径,需和你的项目结构匹配vmArgs:自动添加调试代理参数,无需手动执行java命令
如果使用nvim-jdtls管理Java项目,还可以通过require('jdtls').setup_dap()来自动生成更智能的launch配置,自动获取类路径和主类信息,无需手动配置。
内容的提问来源于stack exchange,提问作者Joao Felipe
相关产品推荐
相关产品推荐

