首先被调试的服务配置
被调试的 java 服务需要开启允许被远程调试的配置,具体就是启动脚本中,加上允许被远程调试以及相应端口
# 针对JDK15.-1.8
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=端口
# 针对JDK1.9及以上
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=端口
- transport=dt_socket:指定使用套接字传输。
- server=y:表示当前JVM作为调试服务器。
- suspend=n:表示JVM在启动时不暂停,立即执行。如果设置为y,则JVM会在等待调试器连接时暂停。
- address=xxxx:指定调试端口。
idea 中配置远程调试连接上被调试服务
自己随便弄一个 idea 的项目,其中配置 configuration,Remote JVM Debug,输入被调试服务所在的 ip 以及 port
# 针对JDK15.-1.8
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=端口
# 针对JDK1.9及以上
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=端口
打断点开始调试
断点开始调试即可
远程断点会阻碍服务器其他请求吗?
会阻碍
远程端点直接终止会如何?
服务端会正常往下执行
本地代码修改,远程断点会断在哪?
如果本地代码经过修改,比如本地的 15 行对应远程的 16 行,本地的 16 行对应远程的 17 行,那么断点时候实际是按照代码行来断的,比如本地跑到 16 行代码断住了,其实远程断点它以为到了的远程代码的 16 行(也就是本地代码的 15 行)