远程debug调试原理
在本地远程调试服务器端的代码原理:本地和服务器端建立一个socket连接监听,当客户端访问服务器的时候,服务器端会先去问本地idea有没有断点,如果有会停在当前断点,如果没有就返回给客户端。
缺点:1.服务器端需要开启debug运行,在生产环境debug会影响性能。实际使用场景有限。
1.本地端配置
在本地idea的工程中添加Edit configuration配置
在配置2中需要将jvm的参数
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
给复制下来,在服务器端配置时候使用。
2.服务器端配置
首先在服务器端配置放开5005端口(阿里云或腾讯云服务器需要在安全组中放5005端口)
在服务器端我使用的是springboot直接打包的demo工程。在命令行中直接使用如下命令运行
java -Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar .\demo-0.0.1-SNAPSHOT.jar
运行成功后会提示
表明服务器端已经启动成功,开启5005端口的监听。
3.实际调试
我们回到本地调试端,在第一步的图片配置2中我配置的remote名字是remoteTest,我们在本地idea中选择remoteTest然后运行工程。
运行后如果没有报错,则本地控制台会有如下提示
Connected to the target VM, address: 'ip:5005', transport: 'socket'
然后我们在本地工程中打上断点,客户端请求服务器后会发现已经进入了本地idea的断点中。