在Java开发中,远程调试是一项非常实用的技能——尤其是当你在远程服务器或生产环境里遇到问题,需要像在本地一样逐行排查代码时,它几乎就是救命稻草。下面就以Debian系统为例,把整个流程拆解开来,一步步说清楚。需要注意的是,所有操作步骤都基于OpenJDK 11及以上版本,且建议在局域网内进行,避免网络延迟影响调试体验。
Java在Debian上的远程调试操作步骤
1. 准备工作:安装JDK
开始之前,请确认你的Debian环境已经安装了JDK。建议使用OpenJDK 11或更高版本,安装和验证的命令非常简单:

sudo apt update
sudo apt install openjdk-11-jdk
java -version # 验证安装,需要显示JDK版本信息
这一步没什么难度,但一定要确保版本信息正确,否则后续调试时可能因为版本不匹配出现奇怪的问题。
2. 配置Java应用支持远程调试
启动Java应用时,需要添加一组JVM参数来开启远程调试。以Spring Boot的jar包为例,典型的启动命令如下:
nohup java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar your-application.jar &
这里有几个关键参数,简单解释一下:
transport=dt_socket:使用Socket协议进行调试通信,这是最常用的方式;server=y:让应用作为调试服务器,等待IDE连接;suspend=n:应用启动时不暂停。如果你希望应用启动后先等待调试器连接再继续执行,可以改成y;address=*:5005:监听所有网络接口的5005端口。星号表示允许远程连接,也可以换成具体的IP地址。
注意,端口号可以自定义,但必须与后续IDE中配置的端口一致。
3. 配置IDE(以IntelliJ IDEA为例)
在IntelliJ IDEA中配置远程调试连接,步骤如下:
- 点击顶部菜单栏 Run → Edit Configurations;
- 点击左上角 + 号,选择 Remote JVM Debug;
- 在右侧配置界面填写:
- Name:自定义一个名字,比如“Debian Remote Debug”;
- Host:远程服务器的IP地址,例如
192.168.1.100; - Port:与JVM参数中
address字段一致的端口号,比如5005;
- 点击 Apply → OK 保存配置。
这一步非常简单,但注意填写IP和端口时不要出错,否则连接会失败。
4. 启动远程调试会话
- 先确认远程服务器上的Java应用已经启动,并且正在监听你指定的调试端口(可以通过
netstat -tlnp | grep 5005检查); - 在IntelliJ IDEA中选择刚才配置的远程调试配置,点击工具栏上的 Debug 按钮(绿色虫子图标);
- 如果连接成功,IDE会显示“Connected to the target VM”的日志提示;
- 在本地代码中设置断点——注意,本地代码必须与远程服务器上的代码版本完全一致,否则断点可能无法命中。之后通过浏览器或命令行访问远程应用,触发断点,IDE就会暂停执行,你可以查看变量值、调用栈等信息。
这一步的关键在于代码一致性,很多新手在这里踩坑,一定要确保本地代码和远程代码(包括依赖库版本)完全对应。
5. 注意事项
- 代码一致性:本地与远程的代码版本必须一模一样,包括所有依赖库。否则断点可能对不上行号,甚至调试行为异常;
- 防火墙设置:远程服务器的防火墙需要允许调试端口的入站连接。例如,使用UFW开放5005端口:
sudo ufw allow 5005/tcp - 网络稳定性:远程调试依赖网络连接,延迟过高会导致IDE响应缓慢甚至断连。建议在局域网内操作,避免跨公网;
- 生产环境谨慎使用:远程调试会暴露应用内部状态,存在安全风险。生产环境仅在必要时使用,用完后立即关闭调试端口(停止应用或调整防火墙规则)。
可选:使用命令行工具(JDB)调试
如果你不想依赖IDE,也可以使用Java自带的命令行调试工具jdb。操作步骤:
- 按步骤2启动远程调试服务;
- 在本地终端执行以下命令连接远程服务:
jdb -connect com.sun.jdi.SocketAttach:hostname=192.168.1.100,port=5005 - 连接成功后,使用
jdb命令进行调试,例如:stop at MyClass:10设置断点,run启动调试,next单步执行等。
JDB虽然不如IDE直观,但在没有图形界面的场景下非常实用,值得掌握。
