java程序远程调试方式
一、背景
程序功能开发完毕且本地测试完毕之后,都会将程序打包在正式的环境中运行,如果环境上测试验证出问题,需要通过本地代码远程调试。
二、调试方式
1)环境上运行的java程序在启动的时候需要设置 jvm启动,加上如下debug 参数:
-Xdebug -Xrunjdwp:transport=dt_socket,address=<环境上运行的java程序所在服务器实际IP>:1088,server=y,suspend=n
参数说明:
- -Xdebug 启用调试
- -Xrunjdwp 加载 JDWP的JPDA参考执行实例
- transport 用于在调试程序和JVM使用的进程之间通讯,值为 dt_socket ,使用套接字传输
- address 调试服务器的地址,包括 服务器的实际IP 以及 客户端用来连接服务器的端口号
- server=y/n JVM是否需要作为调试服务器执行
- suspend=y/n 是否在调试客户端建立连接之后启动jvm
- 值为 y 的时候,表示远程服务启动的时候,必须要等待调试客户端成功与其建立连接才能启动成功。 一般用于调试远程服务启动的逻辑是否有问题;
- 值为 n 的时候,表示远程服务不需要等待调试客户端成功连接远程服务的JVM之后才能启动成功。 调试客户端可以随时连接远程服务。
2)eclipse 配置远程调试Java服务
- 点击 eclipse 顶部菜单中的 run ---> Debug Configurations
- 选择 Remote Java Application ,右键选择 New Configuration
- 配置
-
- Connection Type:选择 Standard(Socket Attach)
- Connection Properties 中的 HOST:填写远程服务所在服务器的真实IP;Port 填写远程服务开启的调试端口
3)tomcat 中的 war 包远程调试
在 tomcat 的启动脚本中 jvm 参数那里加上:-Xdebug -Xrunjdwp:transport=dt_socket,address=0.0.0.0:27011,suspend=n,server=y 即可,用法和上面的基本一致。
三、实操演示
1)服务器IP为 10.19.230.60,该服务器上安装了Java程序服务,配置远程Java服务 jvm启动参数,打开调试模式
启动java 服务的时候,增加调试参数,示例如下:
$JAVA -Xdebug -Xrunjdwp:transport=dt_socket,address=10.19.230.60:1088,server=y,suspend=n -Xmx100m -Xms100m -Dlogging.path=$HOME/logs -Dserver.port=$managerPort -Dhttpserver.second.port=$webPort -DcomponentPath=$componentPath $classpath com.demo.WebApplication &
注意:
- 示例中的 Java 程序是通过 start.sh 启动脚本进行启动的,上述的启动命令编写进了 start.sh 脚本中,$ 开头的变量在脚本执行时均会被指定对应具体的值。
- 这里 suspend=n 配置成了 n ,表示远程Java服务启动的时候不需要等待调试客户端成功连接到远程服务才能够启动成功。
2)eclipse 配置
3)调试
点击 上图的 debug 按钮即可。当然前提是本地代码已经打上了断电,那么在环境进行功能测试的时候,如果走到断电代码处,则eclipse 自动转为debug模式,可以进行代码调试。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?