远程debug调试,小伙伴们都很惊讶!上

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 远程debug调试,小伙伴们都很惊讶!上

文末附上视频教程下载地址(白嫖0积分下载)

1,远程DEBUG的必要性

由于部署环境的差异性,相信很多朋友都碰到过开发环境正常测试过的功能在测试环境甚至生产环境下出现bug的情况。一般情况下,生产环境可以采取的手段比较单一,即通过日志的方式获取运行中的环境上下文,分析日志文件并尝试重现bug。这会带来的问题还是不少的,首先,日志的分析是一项比较耗时的工作;其次,现有的日志记录不一定能反映出问题,你可能需要多次重复这个过程(分析日志->猜测问题->加日志->部署->获取日志)来慢慢逼近问题。倘若是测试环境,我们还多了一项可供选择的手段——远程调试——将程序在测试环境中以debug模式启动,在本机使用IDEA在工程中设置断点进行调试。

2,IDEA构建SpringBoot测试Demo

新建SpringBoot测试项目remote-debug,只需要web依赖支持即可;版本选用2.2.6.RELEASE(注意,别用2.5.1版本,有坑,亲测)

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.java1234</groupId>
  <artifactId>remote-debug</artifactId>
  <version>v1.0</version>
  <name>remote-debug</name>
  <description>Demo project for Spring Boot</description>
  <properties>
    <java.version>1.8</java.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

application.yml:

server:
  port: 80
  servlet:
    context-path: /
  tomcat:
    uri-encoding: utf-8

简单搞个TestController,提供一个Rest接口

package com.java1234.controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author java1234_小锋
 * @site www.java1234.com
 * @company Java知识分享网
 * @create 2021-06-12 15:37
 */
@RestController
public class TestController {
    @PostMapping("/test")
    public String test(Integer id,String name){
        System.out.println("id="+id);
        System.out.println("name="+name);
        if(id>0){
            return "success "+name;
        }else{
            return "fail";
        }
    }
}

我们启动项目,用postman测试下:

测试接口:http://localhost/test 加入Body form-data 参数 id=1,name=marry,Send 测试,返回 success marry,测试OK;

01e715e52cb08a4fc2ec8c682e3f514.png

3,测试Demo项目配置支持远程调试

pom.xml里配置jvmArguments参数 -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n:

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <configuration>
        <jvmArguments>-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n</jvmArguments>
      </configuration>
    </plugin>
  </plugins>
</build>

加了此配置后,打包后的项目发布服务器,可支持远程DEBUG;

具体参数详解:

-Xdebug 通知JVM工作在DEBUG模式下;

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

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

address 调试服务器的端口号,客户端用来连接服务器的端口号;

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

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

4,IDEA打包jar

我们打包jar包;

右侧Maven工具,双击 package打包工具;

e3c0a1b25f20d733633976da52e7b0c.png

一般打包跳过test,可以点击箭头所指闪电图标,这样打包速度会快很多;

4bb9a953ed2c1af3beafc91cfcc4a3f.png

打包后,在target目录下,会生成一个jar包;我们把它复制出来即可;

1bd3f1a3bf0c921cee9e44267118275.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
|
分布式计算 Java Hadoop
Spark3.3.0源码编译补充篇-抓狂的证书问题
Spark3.3.0源码编译补充篇-抓狂的证书问题
31 0
|
3月前
|
Java 测试技术
使用IDEA进行服务器远程debug调试
使用IDEA进行服务器远程debug调试
89 0
|
11月前
|
Java 测试技术 Docker
java实现线上环境远程debug调试
java实现线上环境远程debug调试
343 0
|
人工智能 IDE 开发工具
新手上路,如何debug调试程序?
写代码,不可避免地会出现bug。很多人在初学编程的时候,当写完程序运行时,发现结果与自己预料中的不同,或者程序意外中止了,就一时没了想法,不知道该从何下手,只能反复重新运行程序,期待忽然有次结果就对了。
|
JavaScript 前端开发 Linux
2022 我用 MacBook Pro 整一年 【感想 与 踩坑指南】
2022 我用 MacBook Pro 整一年 【感想 与 踩坑指南】
218 0
|
Java 应用服务中间件 Android开发
远程debug调试,小伙伴们都很惊讶!下
远程debug调试,小伙伴们都很惊讶!下
245 0
远程debug调试,小伙伴们都很惊讶!下
|
移动开发 前端开发 小程序
为了偷懒,我用google/zx一键自动打包编译了前后端项目并发布到指定环境
由于正在负责的一个项目,就说前端涉及到PC端、公众号端、APP端的H5、小程序端、可视化大屏端,而PC和APP又通过qiankun引入了微前端的理念。整体一圈下来可能光前端编译打包就要build差不多二十次。而有时候经常性的bug改动,这个时候便只需要进行测试后需要进行小范围的测试。
194 0
IDEA远程debug调试设置
IDEA远程debug调试设置
332 0
IDEA远程debug调试设置
IDEA中如何使用debug调试项目
① Show Execution Point (Alt + F10):如果你的光标在其它行或其它页面,点击这个按钮可跳转到当前代码执行的行。  ② Step Over (F8):步过,一行一行地往下走,如果这一行上有方法不会进入方法
89 0
IDEA中如何使用debug调试项目
|
XML Java 数据库
IDEA中如何使用debug调试项目 一步一步详细教程
IDEA中如何使用debug调试项目 一步一步详细教程
361 0