众所周知,Java是在网络环境下诞生的语言,其对网络也非常支持。在IDEA中,点击调试按钮时就能发现:
调试命令是通过socket传输的。通过java选项得知:
命令 | 含义 |
---|---|
-XDebug | 启用调试。 |
-Xnoagent | 禁用默认sun.tools.debug调试器。 |
-Djava.compiler=NONE | 禁止 JIT 编译器的加载。 |
-Xrunjdwp | 加载JDWP的JPDA参考执行实例。 |
transport | 用于在调试程序和 VM 使用的进程之间通讯。 |
dt_socket | 套接字传输。 |
dt_shmem | 共享内存传输,仅限于 Windows。 |
server=y/n | VM 是否需要作为调试服务器执行。 |
address=9999 | 调试服务器的端口号,客户端用来连接服务器的端口号。 |
suspend=y/n | 是否在调试客户端建立连接之后启动 VM 。 |
在远程服务器端使用该命令可以启动调试监听:
java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9999,
server=y,suspend=y -jar yourjar.jar
在客户端同样使用对应的参数进行断点和调试,在IDEA中,配置步骤如下:
1.先打开该JAR的源码项目(要求和打包的JAR是同一份源码,否则调试时会出现字节码不一致的警告)
2.编辑该项目的配置:
3.在添加新配置中选择远程,并给予服务端的配套配置(仅仅需要输入IP地址和端口号):
4.保存该配置,并且在需要断点的地方添加断点,然后点击调试按钮。现象如下:
这样一来,远程项目的调试也就成功了!
最后总结一下完整流程:
1.先将需要调试的代码打包成jar - 右击项目的模块设置,Artifacts中选择From modules with dependencies…
2.将打包的jar发送到服务器端
3.在服务器端开启远程调试监听
4.在客户端配置远程调试地址和端口号
5.启用调试!