“在我本地是没问题的”,这个是程序员经常说的一句话,在本地测试怎么都正常,但是在服务器跑起来偶尔出问题了,这种问题,一般是服务端的数据或者环境不同引起的,需要在服务端测试。
而服务端又没有安装idea,如何测试呢?java的程序员看过来了,java提供了idea的调试线上代码的调试方案。
方案如下:
我们需要在jar的启动参数里,追加启动参数,在java命令里,添加下面的代码:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005上面命令的意思是启动一个调试端口,端口是5005
这里是安全上最重要的一步,很多教程只告诉你如何调试,不告诉你如何做安全,是不行的。
直接将线上的调试端口映射出来,是不安全的,因为没有任何的密码保护。因此,不能直接在云端将内网应用服务器的5005端口映射出来,需要使用ssh隧道来实现端口映射。
这里可以使用yunedit-ssh客户端来做端口映射,yunedit-ssh是一个ssh客户端工具,有ssh隧道功能,还有scp上传和ssh命令行功能。
ssh隧道的原理是通过ssh跳板机,通过ssh协议登录ssh跳板机,然后ssh跳板机将云端内网的端口映射到客户端本地。
先下载安装yunedit-ssh,安装很简单,直接双击无脑安装即可。
下载完后,如下图,创建一个ssh连接,并且为这个ssh连接添加映射规则,如下例图:

这个规则的意思是,登录ssh服务器(跳板机),跳板机负责将上面内网IP为10.246.10.11的内网服务器的5005端口,映射到本地的5005端口上。这样,用户就需要ssh密码才能映射到服务端的端口。
这个时候,启动上图这个映射开关,我们连接本地的5005端口,即可连接上云端10.246.10.11的5005端口。
在idea找到Run菜单,再点击Edit Configurations
会出现如下例图,点击左上角这个➕号,创建一个Remote Jvm Debug类型的调试项目。选择了类型后,出现这个界面:

由于端口已经映射到本地了,连接localhost下的5005即可调试服务端的程序了。

点击这个按钮,即可启动调试
记得,本地的代码分支必须跟服务端的版本一致,记得切换到相同版本的代码里调试。
这个时候,在相应的代码打断点,当服务执行到响应的代码的时候,自动就会进入断点。
好了,完整的调试方法说完了,务必要启动ssh隧道调试哦,安全是第一位,请收纳。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。