前言
介绍:Java Remote Debug指的是"Java远程调试"。特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用。本人就遇到这样一个问题,本地环境运行一切正常,但是部署到服务器就报错,而且问题一直找不到,这时候使用远程调试就方便得多了,便于我们更快的查找出问题。
步骤
废话不多说,直接上教程
1. 本地项目使用Maven工具打包后,将生成的jar包上传到服务器。
2. 启动命令修改为如下,程序就会支持Remote Debug
nohup java -Djavax.net.debug=ssl -Xdebug -Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8080 -jar demo-0.0.1-SNAPSHOT.jar --server.port=8888
-spring.profiles.active=test >&1 &
注:
-XDebug 启用调试
-Xrunjdwp 加载JDWP的JPDA参考执行实例。
transport 用于在调试程序和 VM 使用的进程之间通讯。
dt_socket 套接字传输。
server=y/n VM是否需要作为调试服务器执行。
address=8080 调试服务器监听的端口号(等下使用IDEA调试需要用到)。
-suspend=y/n 是否在调试客户端建立连接之后启动 VM 。--server.port
=8888 修改应用程序启动端口号(application.yml中已设置可忽略)
-spring.profiles.active=test 选择不同环境配置文件(如 使用application-test.yml配置文件,没有可忽略)
demo-0.0.1-SNAPSHOT.jar 启动的jar包,修改为自己上传的jar包
3. 程序启动后,在IDEA中配置一下,让它去访问远程的VM
添加配置Remote:
点击debug运行:
控制台输出如下说明连接成功:
若连接失败:
- 1.请使用
telnet 192.168.20.64:8080
命令查看是否成功 (ip为jar包运行环境地址,端口为启动命令address地址) - 2.telnet若失败,使用
netstat -nltp
命令在服务器(jar包运行环境)执行,查看address配置的端口信息;在Local Address列我们看到了端口信息,若显示的ip为0.0.0.0:8080 (表示telnet是ip只要为服务器任一ip都可以,但是一般来说只有一个,不排除多网卡的情况),若显示localhost:8080则需要修改debug启动命令address=8080
为address=192.168.20.64:8080
(ip为jar包运行环境ip)
4. 打断点调试
我们可以在IDEA本地文件中打断点进行调试:
5.防止断点把VM挂起
- 提示:idea 的断点默认会挂起整个 VM , 这样一来,任何一个线程进入断点都会导致所有的请求(其他没打断点的请求)被阻塞。这样有可能影响测试环境的正常使用。
- 解决方案:打完断点后,使用鼠标右键单击红点,将 Suspend 设置为 Thread,最后再点击一下 Make Default 设置为默认。以后有需求可以再改回来。