在 Ubuntu 上调试 Java Web 应用的标准流程
一 本地开发调试 Tomcat 或嵌入式容器
- 安装环境:安装 JDK 8/11/17 与 Tomcat 9(或你使用的版本),并准备 Eclipse IDE for Java EE 或 IntelliJ IDEA。
- 在 IDE 中配置 Server Runtime(指向 Tomcat 安装目录),创建 Dynamic Web Project,将应用部署到服务器。
- 在 JSP/Servlet/业务代码 中设置断点,使用 Debug As → Debug on Server 启动调试会话,浏览器访问触发断点即可单步、观察变量与表达式。
- 查看运行日志与问题定位:Tomcat 日志通常位于 /var/log/tomcat9/catalina.out,结合日志与断点能更快定位问题。
二 远程调试 Tomcat 或任意 Java Web 服务
- 在 Ubuntu 服务器上启用调试参数
- 方式一(推荐,不改动启动脚本):在 Tomcat 的环境配置中设置 CATALINA_OPTS,例如在 /usr/share/tomcat9/bin/catalina.sh 的合适位置加入(放在其他 JAVA_OPTS 设置之后更稳妥):
CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"
说明:
- address 使用 5005(可自定义),建议写成 address=*:5005 以监听所有地址,避免仅绑定 127.0.0.1。
- suspend=n 表示应用启动不等待调试器;如需先挂起等待连接,可改为 suspend=y。
- 方式二(传统参数,兼容旧版本):
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
- 重启 Tomcat 生效:
sudo systemctl restart tomcat9
- 在 IDE 中创建远程调试配置
- IntelliJ IDEA:Run/Debug Configurations → 选择 Remote JVM Debug,Host 填服务器 IP,Port 填 5005,选择源码模块后点击 Debug。
- Eclipse:Debug Configurations → Remote Java Application,配置 Host/Port(5005),选择项目源码后 Debug。
- 连接与验证
- 在服务器上确认调试端口已监听:
ss -lntp | grep 5005
- 本地 IDE 命中断点后,即可像本地调试一样查看变量、堆栈与表达式。
三 命令行与进阶工具
四 常见问题与排查清单
- 端口与防火墙
- 监听地址
- 远程连接务必使用 address=*:5005 或明确绑定 0.0.0.0,避免仅 127.0.0.1 导致外部无法连接。
- 版本与兼容性
- 确保 JDK 版本 与 Tomcat 版本 兼容;JSP 调试依赖容器正确部署与源码匹配。
- 日志优先
- 无法命中断点时,先查看 catalina.out 与 localhost.<日期>.log,确认应用已成功部署且无部署/启动异常。
- 远程代码一致性
- 远程运行的 class 文件 必须与本地调试源码一致(相同版本/相同构建),否则断点可能不生效或错位。