唠嗑部分
很多java开发的小伙伴不知道java项目如何远程调试,每次出现环境问题都会十分纠结,只能在源代码中通过一行一行的日志去排查,即没有技术含量也浪费时间
今天来说一说,java项目如何远程debug
Java XDebug(远程debug模式)参数详解
- -Xdebug:通知JVM工作在debug模式下;
- -Xnoagent 禁用默认sun.tools.debug调试器。
- -Djava.compiler=NONE 禁止 JIT 编译器的加载。
- -Xrunjdwp:通知JVM使用(java debug wire protocol)来运行调试环境;加载JDWP的JPDA参考执行实例
- transport:监听Socket端口连接方式(也可以dt_shmem共享内存方式,但限于windows机器,并且服务提供端和调试端只能位于同一台机);
- server:server=y表示当前是调试服务端,=n表示当前是调试客户端
- suspend:suspend=n表示启动时不中断,一般用于设置主动连接;suspend=y表示启动时就进入调试模式,一般用于被动连接
- address=port表示远程debug所开放的端口号
言归正传
首先编写案例代码
/**
* @Project: spring-boot-remote-debug-demo
* @Author: cxs2014501@163.com
* @Create: 2023/2/13 13:40
* @Description:
**/
@RestController
@RequestMapping("/debug")
public class DebugController {
private static final String ACCOUNT = "admin";
private static final String PWD = "admin1234";
@PostMapping("/login")
public Map<String, Object> login(@RequestBody LoginDTO dto){
Map<String, Object> map = new HashMap<>();
if (ACCOUNT.equals(dto.getUsername()) && PWD.equals(dto.getPassword())) {
LoginVO vo = new LoginVO();
BeanUtils.copyProperties(dto, vo);
vo.setLoginTime(LocalDateTime.now());
map.put("data", vo);
map.put("msg", "登陆成功");
} else {
map.put("msg", "登陆失败,用户名或密码错误");
}
return map;
}
}
启动
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8888 -jar app.jar --server.port=2023 &
(自己虚拟机调试要关闭防火墙)
idea配置调试
位置:运行 > 编辑配置
开始调试
使用postman或curl请求:/debug/login
结语
1、制作不易,一键三连再走吧,您的支持永远是我最大的动力!
2、Java全栈技术交流Q群:941095490,欢迎您的加入!