安全地远程调试Minecraft服务器插件的方法

何がしたいのか

PaperやSpigotサーバーで動かすプラグインをリモートサーバーでデバックしながら開発したい。

调试是指对程序进行错误检测和修复的过程。

可以停止正在执行的程序并查看变量内容,以及动态切换程序的更改内容。

为什么选择远程工作?

使用VPS等远程启动服务器的优点有两点,从我的角度来看。

其他开发人员能够实时查看开发进度。

在本地搭建服务器虽然可能,但需要进行端口开放等繁琐的环境设置。

对低配置电脑友好

Minecraft服务器软件的资源使用量非常庞大,特别是在8GB的笔记本电脑等设备上,内存不足会导致开发效率低下。同时打开多个客户端更是不可能的…

方法

Java虚拟机参数

运行jar文件时需要在参数中添加这个

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

在IntellijIDEA等开发环境中进行连接。

image.png

ssh端口转发

以下是一种可能的中文释义:
尽管可以将上述的 JVM 参数如下设定,但此方法会导致任何人都能够连接,非常危险,只要知道地址和端口号。

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

在使用编辑器之类的工具进行连接之前,请在SSH连接时附加此类参数。连接目标是正在运行服务器的位置。

ssh -L 5005:localhost:5005 <username>@<remote-host>

当然,您将能够使用远程调试连接到正在运行于本地主机的5005端口的服务器。

如果在Docker中启动服务器的情况下

据说在jdk9以上的版本中,jvm参数的address只能指定端口,否则默认限制为本地主机。为了能够从docker主机连接,我们需要添加0.0.0.0。

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

当接收到连接请求来到主机的5005端口时,为了连接到正在运行的服务器容器,我们会通过docker进行端口转发。另外,我们还会通过添加127.0.0.1,使外部无法连接。

-p 127.0.0.1:5005:5005

由于我对Docker的JVM参数配置不太了解,所以请您确认下面的内容。

请你提供一份中文的参考答案。

bannerAds