前言
开发新功能时,经常会遇到在本地环境运行没问题,但是部署到了 Linux 服务器上跑的时候就出现问题这种情况;还有一种情况是需要定位线上问题,这两种情况以前的做法就是加 log 日志输出,总是不能精准定位问题所在,如果能够像本地环境一样调试代码,那这个问题也就迎刃而解了。
开始之前
本文介绍 IDEA 与 Tomcat 的远程调试,且笔者在日常工作当中也是这么做的,网上很多都是互相抄袭,没有经过验证的伪原创,让人不快。
一、添加运行项
IDEA 添加远程调试项
填写服务器 IP ,端口使用默认的即可,复制第二行参数
二、修改服务器中的 Tomcat 配置
连接远程服务器,进入 Tomcat 根目录下的 bin
目录,修改 catalina.sh
文件
定位到 108 行左右,找到 cygwin=false
这一行,
在这一行的前一行添加
JAVA_OPTS=""
然后将从 IDEA 中复制的那串参数粘贴到双引号之间,保存退出。
然后启动 Tomcat,如果 Tomcat 是已经启动的话,必须要重启一下。
三、调试环境修改
为了调试方便,需要暂时关闭掉防火墙,否则可能无法连接。
service iptables stop
四、IDEA 远程调试
回到 IDEA,点击 Debug 按钮,启动刚才添加的 Remote,如果以上没有配置错,那么控制台将打印出
此时就和本地调试一样打断点调试就行了
五、解决IDEA 无法连接远程 Tomcat
如果提示无法连接,如下图
则检查以上配置是否正确,确认都正确的话,可能是服务器防火墙的原因导致,需要关闭防火墙。
如果服务器是阿里云的,还需要配置 ECS 服务器的安全组,开放 5005
远程调试端口。 详见第八条
六、解决断点不生效
注意:
启动 Remote 的 Debug 之后,需要等待断点变成如下图时,再去访问接口;如果断点中间没有出现对号,说明断点还未生效,需要等待一会儿。
如果有时候死活也没法断点,就把服务器上的 Tomcat 重启一下试试!
七、其他问题
因为在 catalina.sh 中添加了远程调试的参数,导致使用 tomcat 的 bin/shutdown.sh 时,可能无法完全停止服务器。可以直接 kill 掉服务器,如果不再进行远程调试,最后把远程调试参数注释掉重启。
八、阿里云 ECS 安全组设置
进入 ECS 控制台,点击安全组
然后选择 创建安全组
然后配置该安全组的规则
点击公网入标签,再点击右上角 添加安全组规则
授权对象 填写你的 ip 地址即可。
添加完安全组之后,进入 ECS 实例
选择右侧 加入安全组,选择加入刚才添加的安全组即可。