本文主要介绍Java代码部署到Linux主机上后用IDEA远程调试

​ 本文源起于一次线上Bug,代码在本地运行良好但是放到 Linux 主机上却报了错,当时还不会 IDEA 远程调试只能不断的将关键位置的信息存入日志或控制台打印出来,且不停的打包和修改非常让人抓狂🙃 ,百度中发现 IDEA 居然还可以调试 Linux 主机上正在运行的代码,简直就像发现了宝藏,又是一份意想不到的狂喜。🤣🤣🤣!!

​ 首先介绍下环境:IDEA 2020.1 , JDK1.8 , 调试主机是运行在Hyper-V 中的 Centos7 主机 项目用的是SpringBoot

IDEA配置

​ 先打开IDEA 最上方的 Run->Edit Configurations... ,点击左上角的加号选择 Remote JVM Debug 窗口如下。image-20211013173951926

​ 其中Host需要填写你 Linux 主机的地址 Port 填写主机上未被占用的端口号就行,它这里默认是5005 这里我就不动了,再将下面文本框中的参数复制并记录下来,后续部署的时候需要使用。

1
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

Linux配置

​ 将当前代码打成jar包上传到 Linux 后,部署的命令需要插入上面 IDEA 给的参数,如下。

1
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar 你的jar包名称

​ 若部署出现Listening for transport dt_socket at address: 5005 则表示本次部署打开了调试模式。

​ 至此IDEA选择你刚刚配置的运行项再点击小虫子按钮就可以开始调试啦!要注意本地代码要和服务器上的包相对应哦!

访问问题

​ 如果仍然不行则大概率是端口访问的问题,或者防火墙未关闭,我这里推荐你用 tcping :一个开源的控制台程序,可以用来 ping Linux的端口image-20211014105759187

​ 使用方法也很简单:将 tcping.exe 下载下来 放到 C:\windows\system32 目录下,这样你就可以在CMD中直接使用它啦!

image-20211014110343029

语法如下:

1
tcping IP地址 端口号

CentOS 中你可能用的命令如下:

Linux查看某个端口是否在运行:

1
netstat -anp|grep 端口号

查看防火墙状态:

1
systemctl status firewalld

暂时关闭防火墙:

1
systemctl stop firewalld

永久关闭防火墙:

1
systemctl disable firewalld

重启防火墙:

1
systemctl enable firewalld

Comments

⬆︎TOP