1. 非RemoteDebug模式
在该模式下,请求的处理过程为:用户发送请求到server端后,server端进行处理,返回将结果返回给用户。
2. RemoteDebug模式
在该模式下,请求的处理过程为:
(1)用户发送请求到server端;
(2)server端处理请求时,询问本地Intellij是否有断点,如果有,则在本地断点处进入debug模式,并将远程断点处的堆栈信息发送到本地;
(3)本地结束debug;
(4)server返回处理结果。
2.1 代码实现
1. 编写springboot web代码:
package com.john.remotedebug.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RemoteDebugTestController {
@GetMapping("")
public String hello(String name) {
System.out.println("input param: " + name);
System.out.println("success...");
if ("errorTest".equals(name)) {
int a = 2 / 0;
}
return "Hello " + name;
}
}
2. 打好jar包
3. 配置intellij的remote debug
拷贝标号4的内容;
4. cmd启动jar包:
java -Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar demo-1.0.0.jar
5. 启动intellij的remote debug,并在某个位置打好断点
6.页面请求controller,intellij会在断点处进入debug模式
2.3 注意事项
1. 同一时间只能有一个intellij能够远程debug,第二个尝试进入时报错:
2. 远程debug时,不要求本地代码能够编译通过或者能够启动,下图是本地代码即没有编译,且存在语法错误,但仍能进入远程debug模式
3. 可以在本地debug时,改变变量值,且能生效,例如,上图中改变name的值,后续代码能够以改变后的值进行处理。