Java在Ubuntu上的远程调试技巧
确保Ubuntu系统已安装JDK(推荐OpenJDK 11及以上版本),可通过以下命令安装:
sudo apt update && sudo apt install openjdk-11-jdk
安装完成后,验证Java版本:
java -version
确认输出显示JDK版本信息,确保环境变量JAVA_HOME已正确配置(通常自动配置,可通过echo $JAVA_HOME检查)。
在启动Java应用时,需添加JVM参数启用远程调试。推荐使用-agentlib:jdwp参数(适用于JDK 5+),命令格式如下:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar your-application.jar
transport=dt_socket:使用Socket传输(最常用,兼容性好);server=y:当前JVM作为调试服务器,等待本地IDE连接;suspend=n:应用启动后立即运行(若设为y,则启动时会暂停,等待调试器连接后再继续,适合调试启动问题);address=*:5005:监听所有网络接口的5005端口(可自定义,如*:8000,但需避免与系统其他服务冲突)。若Ubuntu启用了防火墙(如ufw或firewalld),需开放调试端口(以5005为例):
sudo ufw allow 5005/tcpsudo ufw reloadsudo firewall-cmd --zone=public --add-port=5005/tcp --permanentsudo firewall-cmd --reloadtelnet <远程IP> 5005测试连通性(若连接成功,说明端口开放正常)。Run -> Edit Configurations...;+号,选择Remote JVM Debug;Name:自定义名称(如“Remote-Debug-Ubuntu”);Host:远程Ubuntu服务器的IP地址或域名(如192.168.1.100);Port:与远程应用配置的address端口一致(如5005);Apply -> OK保存配置;Debug按钮(绿色虫子图标),启动远程调试会话。连接成功后,IDE控制台会显示Connected to the target VM。Variables面板中,可查看当前作用域内的变量值(包括对象属性、基本类型);Step Over(F8,执行当前行并跳到下一行)、Step Into(F7,进入方法内部)、Step Out(Shift+F8,跳出当前方法)控制执行流程;Evaluate Expression窗口(Alt+F8)中输入任意表达式(如list.size()),可实时计算结果。-p 5005:5005)和容器内JVM参数(如-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005)。