IDEA远程DEBUG调试,在测试环境用本地代码进行DEBUG!!!

背景

        我们日常工作中,难免会遇到这样场景的问题,明明在本地测试没有任何问题,为什么一到测试环境、开发环境就抛异常了呢?这到底是道德的沦丧?还是人性的扭曲?

        那么此时此刻,如果产生该业务BUG的流程过于冗长,在本地复现时间复杂度高,且复现环境使用的数据差距较大,开发只能追着各个服务的日志文件一一查看,根据日志翻阅一行行的代码猜测参数变更猜测数据走向。过程无疑是极其缓慢的,那么有没有更简单、更方便、更舒适、更快乐、更容易让自己多摸鱼一会儿的方法呢?答案无疑是有的。那么开始吧

 简述

        本地DEBUG调试是IDEA自带的功能,无需任何插件与工具。非常方便,但是有个硬性要求,需要开放该服务器的端口,这样才能在本地进行监听断点调试。

        当你还在一行一行查看各个服务的日志时候,你的同事已经打上断点进行DEBUG分析了。这就好比,你还在拿镰刀收割麦子,别人已经上大型收割机了。顿时就感觉凉了呀!

 实战

实战代码仓库地址:https://gitee.com/yiang-hz/blog.git 目标项目:blog -> tips -> remote-debug

PS:直接拉取项目可以直接跳过该小节,前往调试小节

  步骤1:创建项目

        首先我们创建任意一个Maven项目,在pom文件添加Maven依赖与打包插件

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.2</version>
    <relativePath/> 
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

 步骤2:创建接口与启动类

         DemoController与RemoteDebugApp

@RestController
public class DemoController {

    @GetMapping("/debug/{id}")
    public String testDebug(@PathVariable("id") String id) {

        //请求示例:http://127.0.0.1:8168/debug/1
        System.out.println("Request Param: id = " + id);

        return "success: id = " + id;
    }
}
@SpringBootApplication
public class RemoteDebugApp {

    public static void main(String[] args) {
        SpringApplication.run(RemoteDebugApp.class, args);
    }
}

步骤3:配置端口,可不配置则使用默认端口

        创建application.yml文件,配置

server:
  port: 8168

调试

        配置好项目或者拉取了代码之后,我们开始调试吧!

 步骤1:测试打包       

        首先我们本地启动项目,运行访问 http://127.0.0.1:8168/debug/1 即可看到返回

        IDEA启动可访问之后, 我们再打包Maven工具侧边栏可在IDEA最右侧找到。

 

         日志栏查看打包路径,即可找到对应Jar

 步骤2:配置Remote

        1.选择Edit Configurations...

         2.点击“+”找到Remote单击添加

 

         3.配置并保存,备注:如果需要变更启动名称:在下图Name:一栏可以修改

        以上即配置好了,我们在本地启动项目,并且复制上方 Command line ...JVM 一栏的配置

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

具体参数详解:

-Xdebug 使JVM以DEBUG模式运行。

-Xrunjdwp 使JVM使用(Java debug wire protocol)运行调试环境,该参数包含一系列的调试选项。

transport 指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式,其中,dt_shmem只适用于Windows平台。

address 调试服务器暴露出给客户端连接的端口号,可任意设置。非启动端口

server=y/n JVM 是否需要作为调试服务器执行。

suspend=y/n 是否在调试客户端建立连接之后启动 JVM。

 步骤3:本地启动Jar,带上启动监控参数

        切到jar存在的目录,输入命令运行,如果在IDEA启动了则需要关闭,避免启动端口冲突

java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 remote-debug-1.0.jar

        cmd启动该jar,可以看到监听端口为5005

 步骤4:启动IDEA中配置好的Remote,可以看到链接信息

 步骤5:断点调试

        可以看到再次访问 http://127.0.0.1:8168/debug/1 之后,能够直接通过IDEA断点调试本地java-jar启动的项目了

         如上,服务器同理

总结

        以上即是远程调试的方式,实现比较简单,这里描述的较为基础详细,希望有帮到大家。 

同理,如果部分公司不允许远程调试操作,我们可以使用阿里巴巴开源项目监控工具Arthas去进行分析。不过入门、使用起来较为复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值