很多时候,由于本地环境跟服务端环境有差异,或者服务端的数据有差异,造成在服务端运行出错,但是本地不出错的情况,因此,就需要做远程调试。
java是一个很有意思的语言,它有很多好用的工具,就比如,java是支持在线调试的,只要在服务端启动调试端口就行了。
但是很多教程都没有考虑安全问题,很多教程都是直接连接服务端的调试端口,直接暴露调试端口会导致服务端被攻击,因此,最近很多公司因为调试而导致出现安全事故。因此,我们这个教程不单是告诉大家如何调试,还将教会大家如何做安全。安全是远程调试的必修课。
一、修改java启动命令,追加启动参数
追加的参数如下,一般是使用5005端口调试:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
二、使用ssh隧道工具将应用端口映射到本地
注意,这里是使用ssh隧道工具将端口映射到本地,不是直接云端机房开通外网访问将端口挂到外网。这个很重要,因为ssh隧道还要经过ssh跳板机的密码这一关,有安全校验,假如直接开通外网端口访问是没有任何安全措施的。
这里推荐使用yunedit-ssh这款可视化ssh工具,来做ssh隧道,因为它针对ssh隧道功能比较专业,有断线重连等功能,还有隧道开关功能。
使用方法:
(1)下载yunedit-ssh安装,下载下来后,双击不断点击下一步就可以安装完成了。
(2)在界面创建一个连接云端ssh跳板机的ssh连接,并设置映射规则,添加完后,如下图所示:
如上图所示,映射规则将云端机房内网服务器的5005端口,映射到本地5005端口了,启动这个映射开关后,后面访问本地localhost的5005端口,即可通过ssh隧道访问云端的内网服务器了。
三、配置idea远程调试
这个很简单,在idea中,点击Run菜单,然后再点击Edit Configurations,在接下来的界面上,点击左边➕号,新建一个Remote Jvm Debug调试类型的调试项。界面如下:
四、使用idea打开相同分支的代码
idea必须打开跟服务端版本相同的分支的代码,否则服务端的代码可能会跟本地的代码不一致。
找到需要调试的代码,打上断点。
五、在idea启动调试
在idea的右上角,找到这个调试小按钮,点击就启动调试了
当服务端的逻辑运行到这个断点的代码的时候,就可以远程调试了。现在放心调试吧,已经使用了ssh隧道,进行安全调试了。