Hytale之我见 专注hytale服务器技术

java远程调试

2019-10-21
hytaleme

java远程调试可以用来调试本地或远程的java应用,比如可以用来开发调试spigot或hytale服务端插件。

使用步骤

1. 添加启动参数

比如你原来运行java的指令是:

java -jar xxx.jar

那么添加调试后的指令是:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar xxx.jar

看不懂?下面会介绍

2. 开启调试客户端

以IDEA开发工具举例,编辑配置,添加Remote,修改信息,再运行即可,如图:

idea开发远程调试

参数介绍

参考

参数格式:-agentlib:jdwp=<子选项>,子选项格式:<name1>[=<value1>],<name2>[=<value2>]...

子选项列表(不全,完整请看上面的参考链接):

  • transport:传输方式
  • servery表示服务端,客户端调试器可以连接上来
  • suspend:是否暂停java程序直到调试客户端连接上来,n表示不暂停
  • addressservery情况下,表示监听在这个地址(端口)

原理简介

Java平台调试架构参考

JVM(java虚拟机)允许agent(代理,也即外部的库)在运行时注入,它们可以修改运行中.class文件的内容。 可以实现修改运行中的源码,进行性能分析等功能,这些是运行在java虚拟机内的java程序无法实现的。

像上面就引入了jdwp这个agent。

注意事项

  1. 安全考虑:java远程调试没有权限或密码的限制,不要将调试端口对外暴露,否则黑客可以连上来执行指令!
  2. 源码一致性:如果你打断点的源码与运行中被调试程序的源码不一致,那么断点可能会产生行错乱。

目录