远程调试意义
当项目部署到实际的应用服务器或国产,或tomcat,这个时候如果想要找一些没来由或者日志中无法分析出的错误时,可能就会想到
“如果能将线上环境的请求都转发到你本地电脑上的项目代码的话,定位一些问题就会轻易很多!”
很多时候往往是环境问题会导致一些莫名的问题出现,也有可能是一些谜之操作引发了新的问题,这个时候远程调试的意义就显现出来了,我们可以借用线上的环境,去跑本地电脑上的代码,方便我们快速定位问题。
注意点
开启后线上所有请求都会转发到你这里处理,最好不要在线上环境被使用时调试,否则很有可能会阻碍别人的操作
服务端配置修改方式一(tomcat)
- 找到线上环境的 tomcat 所在文件路径,进入 bin 目录
- 此时需要修改 catalina 文件,若是linux环境找到 catalina.sh linux的可运行文件,若是windows 找到 catalina.bat 可执行的批处理文件
- 修改内容如下:
catalina.sh
这里的意思好像是,允许任意来源访问
修改完成后 保存并退出(esc后 wq)(修改指令 vi 文件(在当前文件夹直接catalina.sh 否则需要加上全路径))
然后关闭tomcat,同目录下 shutdown.sh 或者 shutdown.bat 具体和上面一样看环境
然后重启
linux下
./catalina.sh jpda start
windows
catalina.bat
文件内容不一样,大概是这个
IDEA开启并连接远程调试端口(几乎开启方式都是一致的)方式一
完成后点击 Apply 或者 OK即可
点击启动debug
出现
且IDEA左下方没有弹出其他警告,则视为连接线上环境成功
加上断点后即可调试
服务端配置修改方式二
同样修改 catalina.sh
在该文件的空白处添加
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=xxx.xxx.xx.xx:16701,suspend=n,server=y"
需要修改的地方为 address= 的地方 需要修改为tomcat所在IP 后面的端口只要不是已被占用的就可以,可自定义
文件保存并修改
然后使用 catalina.sh 的方式启动tomcat
sh catalina.sh start
IDEA本地开启远端调试方式二
完成后点击OK
开启后同样与方式一相同 加入断点后可以调试
服务端配置修改方式三
windows
修改 startup.bat 文件 在最前面加入
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
必须都在一行, - 后无空格 -前有空格
然后启动 startup.bat
打开浏览器访问在第1步部署的web应用,访问index.jsp,使得程序进入相应的断点就可以了。
不需要调试的时候点击断开,需要调试的时候再点击debug
自我实践
在我的环境中无法修改tomcat中的配置参数,所以在项目的环境中添加了环境变量
JAVA_OPTS -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=18003
此处18003为在应用内部开启的新端口用于调试,然后在该环境中,我对应这个内部端口对外开启了一个外部端口16701,然后使用上方开启IDEA远端调试的方式,IP为线上环境,端口为对外的16701,调试后同样成功。
注意事项
可能会遇到防火墙的情况,导致访问不通,需要关闭或者开放对应端口
总结
对外开启线上调试总的来说就是在应用内部开启调试用的端口,然后对外开放,外部连接的时候也采用连接远端接口请求的方式对接,然后实现两边的打通。