远程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天前
|
API Windows
恶意代码分析入门--初次接触加壳的程序(chapter1_Lab01-02)
实验分析了Lab01-02.exe文件,包括上传至VirusTotal检测、使用PEiD识别壳、FreeUPX脱壳、分析导入函数及字符串。结果显示文件被UPX壳包裹,脱壳后发现其可能通过创建服务和网络连接来实现恶意行为。
11 2
恶意代码分析入门--初次接触加壳的程序(chapter1_Lab01-02)
|
Java 测试技术 Docker
java实现线上环境远程debug调试
java实现线上环境远程debug调试
417 0
MIKE 21 教程 1.7 网格生成过程中的常见报错与问题
MIKE 21 教程 1.7 网格生成过程中的常见报错与问题
|
人工智能 IDE 开发工具
新手上路,如何debug调试程序?
写代码,不可避免地会出现bug。很多人在初学编程的时候,当写完程序运行时,发现结果与自己预料中的不同,或者程序意外中止了,就一时没了想法,不知道该从何下手,只能反复重新运行程序,期待忽然有次结果就对了。
|
JavaScript 前端开发 Linux
2022 我用 MacBook Pro 整一年 【感想 与 踩坑指南】
2022 我用 MacBook Pro 整一年 【感想 与 踩坑指南】
253 0
|
Java 应用服务中间件 Android开发
远程debug调试,小伙伴们都很惊讶!下
远程debug调试,小伙伴们都很惊讶!下
281 0
远程debug调试,小伙伴们都很惊讶!下
|
移动开发 前端开发 小程序
为了偷懒,我用google/zx一键自动打包编译了前后端项目并发布到指定环境
由于正在负责的一个项目,就说前端涉及到PC端、公众号端、APP端的H5、小程序端、可视化大屏端,而PC和APP又通过qiankun引入了微前端的理念。整体一圈下来可能光前端编译打包就要build差不多二十次。而有时候经常性的bug改动,这个时候便只需要进行测试后需要进行小范围的测试。
219 0
|
IDE 算法 开发工具
面向 CV 编程:COPY 了别人文章中的代码,想让代码能像作者一样跑通,应该注意什么呢?怎样才能让代码愉快地跑起来呢
一千个读者,一千个哈姆雷特,写代码也是如此,不同人,理解不同,逻辑不同,同一道题,代码各有千秋,所以出现的问题也是千奇百怪;预期结果就一个,解法却千千万。正如列夫托尔斯泰的安娜卡列尼娜中所说:幸福的家庭千遍一律,不幸的家庭各有各的不幸,但是主要不离题万里,错误基本能在一个常见的范围。 有人写代码是为了生计,有的人写代码仅仅是自己的兴趣使然。应该大多人都是第一种情况,我也一样,到了大学才拥有自己的第一台电脑,那时候智能手机刚出现,再往前倒推几年,手机都是个稀罕物,没有条件所以跟兴趣不沾边,唯一沾点边的是以前我喜欢刷竞赛题,锻炼逻辑,对学习算法有点帮助,但是作用有限。甚至有些人对自己所选的专业一无
997 2
面向 CV 编程:COPY 了别人文章中的代码,想让代码能像作者一样跑通,应该注意什么呢?怎样才能让代码愉快地跑起来呢
|
存储
汇编实验一 DEBUG调试工具的使用
一、实验目的 1.学习使用DEBUG程序的各种命令。 2.了解计算机取指令、执行指令的工作过程。 3.掌握用DEBUG调试工具自编程序的方法。
393 0
汇编实验一 DEBUG调试工具的使用
|
传感器 编解码 安全
什么? Macbook 也有 Touch ID ! 原来都是因为它... | 众筹星探
自从 iPhone 有了 Touch ID ,你会发现指纹识别真的是一种简单好用的东西。它能让你不需要依靠冗长复杂的密码就能用简单地指纹进行解锁,又快又安全。但你有没有想过如果也能在你的 PC 甚至是 Macbook 上也配上指纹识别,那会是怎样?
189 0
什么? Macbook 也有 Touch ID ! 原来都是因为它... | 众筹星探

热门文章

最新文章