本帖最后由 a1294790523 于 2019-10-26 18:53 编辑
一般来说,我们调试bug的情况是这样的:
但是,这其实是很低效率的方法,因为大多数时间都耗在等待服务器开启和构建的时间上了
改一下构建替换一次,加点代码又构建替换一次,一杯茶,一支烟,一个bug改半天.....
但是今天,我们不需要再这么操作了,因为我们有——Remote Debug!
想看看运行时的数据?打个断点就可以了!
应用修改后的代码?直接构建即可热替换(Hot swap)代码!
那么,怎么配置呢?
如果你正在使用Eclipse:
快换IDEA!不用IDEA不是人!
https://www.spigotmc.org/wiki/eclipse-debug-your-plugin/
可以看看这篇教程
如果你正在使用IDEA:
https://www.spigotmc.org/wiki/intellij-debug-your-plugin/
看看这篇教程吧
什么?全是英文看不懂?你不会网页翻译吗?
实在看不懂?照着下面的图做就可以了
另外,因为我不熟悉Eclipse,所以只能做IDEA的教程:
(有人能补上吗,我会置顶的)
启动bat的例子:复制代码
一切完成之后,轻轻一个按钮,即可启动远程调试
连接上之后就好像平时那样debug就行了
不过需要注意的是,添加/删除类和方法是不被支持的,所以你得手动关掉服务器如何再重新开启debug(理论上可以自己写个适配器解决需求手动关闭的问题,不过我懒就不写了)
什么?你想问问什么原理?
这是用javaagent实现的:https://www.infoq.cn/article/javaagent-illustrated
一般来说,我们调试bug的情况是这样的:
emmmmm....这个地方怎么有问题?
我得改下代码....输出一下这个表
构建插件....复制粘贴...重启服务器
但是,这其实是很低效率的方法,因为大多数时间都耗在等待服务器开启和构建的时间上了
改一下构建替换一次,加点代码又构建替换一次,一杯茶,一支烟,一个bug改半天.....
但是今天,我们不需要再这么操作了,因为我们有——Remote Debug!
想看看运行时的数据?打个断点就可以了!
应用修改后的代码?直接构建即可热替换(Hot swap)代码!
那么,怎么配置呢?
如果你正在使用Eclipse:
快换IDEA!不用IDEA不是人!
https://www.spigotmc.org/wiki/eclipse-debug-your-plugin/
可以看看这篇教程
如果你正在使用IDEA:
https://www.spigotmc.org/wiki/intellij-debug-your-plugin/
看看这篇教程吧
什么?全是英文看不懂?你不会网页翻译吗?
实在看不懂?照着下面的图做就可以了
另外,因为我不熟悉Eclipse,所以只能做IDEA的教程:
(有人能补上吗,我会置顶的)
启动bat的例子:
- @echo off
- rem 设置启动jar
- set jarname=spigot-1.12.2.jar
- rem 拷贝插件文件
- copy /y D:\Develop\Project\JieLong\out\artifacts\JieLong_jar D:\Data\TestServer\plugins
- rem 使用start命令启动服务器
- start "" "C:\Program Files\Java\jdk1.8.0_211\bin\java.exe" -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Xms4G -Xmx4G -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=100 -XX:+DisableExplicitGC -XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=40 -XX:G1MaxNewSizePercent=60 -XX:G1MixedGCLiveThresholdPercent=35 -XX:+AlwaysPreTouch -XX:+ParallelRefProcEnabled -Dusing.aikars.flags=mcflags.emc.gs -jar %jarname% nogui
- rem ping本地来等待JVM启动(JVM启动之前连接会导致远程调试失败)
- ping 127.0.0.1
一切完成之后,轻轻一个按钮,即可启动远程调试
连接上之后就好像平时那样debug就行了
不过需要注意的是,添加/删除类和方法是不被支持的,所以你得手动关掉服务器如何再重新开启debug(理论上可以自己写个适配器解决需求手动关闭的问题,不过我懒就不写了)
什么?你想问问什么原理?
这是用javaagent实现的:https://www.infoq.cn/article/javaagent-illustrated
直接构建到plugins 然后用plugman来reload
66666666666666666666666666666666666666








之后选中新建的这个东西 一路OK就完事了