全栈小白的gravatar头像
全栈小白 2023-03-15 14:46:11
手把手教你java项目如何远程调试

原创声明:本人所发内容及涉及源码,均为亲手所撸,如总结内容有误,欢迎指出

唠嗑部分

很多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 &

手把手教你java项目如何远程调试

(自己虚拟机调试要关闭防火墙)

手把手教你java项目如何远程调试

idea配置调试

位置:运行 > 编辑配置

手把手教你java项目如何远程调试手把手教你java项目如何远程调试

开始调试

手把手教你java项目如何远程调试

使用postman或curl请求:/debug/login

手把手教你java项目如何远程调试手把手教你java项目如何远程调试你学会了吗

 


打赏

已有1人打赏

最代码官方的gravatar头像
最近浏览
全栈小白  LV18 3月18日
最代码官方  LV166 3月18日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友