IDEA进行远程Debug调试的来龙去脉

一、前言

我们在测试环境时,遇到一些bug,看上下文的日志,还是无法判断出问题所在时,此时需要Debug来解决。

为了更方便、更高效地定位和解决问题,远程调试成为一种常见的实践方式。

这个还是不建议在生产中使用,可以在测试环境走和生产一样的单据来Debug。要是生产环境忘记去掉断点,直接炸了!

还是不到万不得已不要在生产使用,使用完也要把本地的断点全部取消掉!

二、JPDA

在实战之前,我们可以了解一下JPDA!能够远程Debug就是使用这个技术实现的!

1. 概念

JPDA(Java Platform Debugger Architecture)是 Java 平台调试体系结构的缩写,它是 Java 开发工具包(JDK)中提供的一组 API 和协议,用于支持 Java 程序的调试。

2. 核心组件

Java 虚拟机工具接口(JVMTI): JVMTI 提供了在 Java 虚拟机 (JVM) 中运行时监视和检测的一组 API。它允许调试器在运行时获取有关类、对象、线程等信息,并在程序执行时进行干预。

Java 调试器接口(JDI): JDI 是在 JPDA 中用于编写调试器的 Java API。它允许开发者通过 Java 语言编写调试器,实现与 JVM 的通信和控制。

Java 虚拟机调试协议(JDWP): JDWP 是 JVM 与调试器之间通信的协议。它定义了调试器如何与 JVM 进行通信,包括断点设置、变量检查、执行控制等。

在这里插入图片描述

3. 调试功能

断点设置: 在代码中设置断点,以便在执行到特定代码行时暂停程序的执行。
变量检查: 查看和修改程序中的变量值。
单步执行: 逐步执行程序,以便更详细地检查代码的执行过程。
异常处理: 在程序抛出异常时停止执行,以进行异常处理。

三、Idea实战

非常的简单就是运行Jar包的时候加上命令,在Idea配置上远程调试就行了!

1. Jar包准备

新建一个项目或者使用公司的项目,打成Jar包。为了模拟真实性,我们在windows里运行Jar包一次,然后上传到虚拟机里运行一次!

在这里插入图片描述
自己写一个Controller,接收请求,多写几行方便打断点:


/**
 * @author wangzhenjun
 * @date 2023/11/28 15:54
 */
@RequestMapping("/test")
@RestController
public class TestController {

    @GetMapping("/list")
    public String list (){
        System.out.println("======1======");
        System.out.println("======2======");
        System.out.println("======3======");
        System.out.println("======4======");
        return "成功";
    }
}

2. Idea配置远程监听

此时Idea已经把运行Jar包的命令给我们了!

在这里插入图片描述

3. 运行Jar包

找到jar所在位置,执行命令:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8088 -jar demo-0.0.1-SNAPSHOT.jar

我们来解释一下命令的意义:

-agentlib:jdwp:启用 JDWP 调试支持。

transport=dt_socket:指定 JDWP 调试器和 JVM 之间的通信方式为 socket 传输。

transport 参数有两种常见的模式,分别是 dt_socket 和 dt_shmem

dt_socket:使用 socket 传输模式,一般用于调试服务器运行
dt_shmem:使用共享内存传输模式,一般用于本地调试,因为共享内存需要在同一台物理机器上才能正常工作。

server=y:表示 JVM 将作为调试服务器运行,等待调试器连接。

suspend=n:指定 JVM 在启动后是否暂停等待调试器连接。n 表示不暂停,即 JVM 在启动后立即执行应用程序。如果设置为 y,则 JVM 启动后会等待调试器连接,直到调试器连接上为止。

address=8088: 指定调试器连接的端口号,和Idea监听的端口一致。

我们先访问一下,控制台是可以打印我们的日志!

在这里插入图片描述

4. 测试

我们启动Idea配置好的监听,然后再打上断点!

在这里插入图片描述

访问接口,成功拦截到请求!

在这里插入图片描述

放行后,查看控制台正常输出:

在这里插入图片描述
此时我们使用虚拟机里的Jar包启动!

需要我们把Idea中的本地IP换成虚拟机的IP

在这里插入图片描述

重新访问,没有问题,我们放行后正常打印!

在这里插入图片描述

四、总结

是不是非常的简单,大家可以自己试一下,这里还是在测试环境玩玩就行。

这种方式还有弊端,现在一般都是容器化部署,这种命令就不太好使了,感兴趣的可以试试使用docker容器来发布!

是不是发布完之后,把Jar包挂载出来,然后再运行一遍专门来Debug的!

有大佬试过的欢迎指教哈!


看到这里了,还请动一下您的发财小手,关注一下公众号哈!!谢谢您的关注!!文章首发看!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/258187.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为交换配置OSPF与BFD联动

实验拓扑 组网需求 如图所示,SW1、SW2和SW3之间运行OSPF,SW1和SW2之间的交换机仅作透传功能。现在需要SW1和SW2能够快速感应它们之间的链路状态,当链路SW1-SW2发生故障时,业务能快速切换到备份链路SW1-SW3-SW2上 配置思路 采用…

Postman使用总结--案例集合导出和导入

Postman导出用例集功能 注意:导出时如果有环境变量的,一定记住把环境变量一起导出还有参数文件; 导出环境变量一定和刚刚导出的案例集合放在一起!!! Postman导入用例集功能

Android13音频录制适配

Android13音频录制适配 前言: 之前写过一篇音频录制的文章,当时是在Android10以下的手机可以成功录制和播放,但是Android10及以上手机提示创建文件失败,最近做过Android13的适配,索性一起把之前的录音也适配了&#…

使用docker-compose搭建docker私服与配置WebUI

简介 本文介绍了使用docker compose 搭建 docker私服 环境 Docker version 24.0.6, build ed223bc Docker Compose version v2.21.0 正文 一、创建registry文件夹 我的路径是/usr/loca/docker/registry 二、创建并编写docker-compose.yml version: "3.9" services…

《深入理解计算机系统》学习笔记 - 第六课 - 机器级别的程序二

Lecture 06 Machine Level Programming II Control 机器级别程序控制二 文章目录 Lecture 06 Machine Level Programming II Control 机器级别程序控制二处理器的状态条件码(隐式设置)通过算术运算隐式设置条件码(将其视为副作用)通过cmp比较命令显示的设…

关于EasyExcel 合并单元格方法该如何实现

在做一个业务的导出,目前遇到一个需求,如下图: import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.write.handler.CellWriteHandler; import com.alibaba.excel.write.metad…

【Windbg】学习及在CTF中解题

1、Windbg介绍 Windbg是一款Windows强大的调试器,可以调试0和3环的程序。 在实际开发中,可以调试我们的错误程序,从而定位关键代码,进行程序代码修复。 WinDbg 是一种调试器工具,由微软公司开发,用于分析…

Springboot数据校验与异常篇

一、异常处理 1.1Http状态码 HTTP状态码是指在HTTP通信过程中,服务器向客户端返回的响应状态。它通过3位数字构成,第一个数字定义了响应的类别,后两位数字没有具体分类作用。以下是常见的HTTP状态码及其含义: - 1xx(信…

C#二甲医院实验室信息系统源码

医院实验室信息系统简称(Hospitallaboratoryinformationsystem),也可以称作实验室(检验科)信息系统或者LIS系统。 LIS定义 其主要功能是将检验的实验仪器传出的检验数据经分析后,自动生成打印报告,通过网络存储在数据…

STM32能够做到数据采集和发送同时进行吗?

STM32能够做到数据采集和发送同时进行吗? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「STM32的资料从专业入门到高级教程工具包」,点个关注,全部无偿共享给大家&…

2023ChatGPT浪潮,2024开源大语言模型会成王者?

《2023ChatGPT浪潮,2024开源大语言模型会成王者?》 一、2023年的回顾 1.1、背景 我们正迈向2023年的终点,回首这一年,技术行业的发展如同车轮滚滚。尽管互联网行业在最近几天基本上处于冬天,但在这一年间我们仍然经…

Spring Boot + MinIO 实现文件切片极速上传技术

文章目录 1. 引言2. 文件切片上传简介3. 技术选型3.1 Spring Boot3.2 MinIO 4. 搭建Spring Boot项目5. 集成MinIO5.1 配置MinIO连接信息5.2 MinIO配置类 6. 文件切片上传实现6.1 控制器层6.2 服务层6.3 文件切片上传逻辑 7. 文件合并逻辑8. 页面展示9. 性能优化与拓展9.1 性能优…

新手入门linux介绍以及 简单命令

一.分区 / 根 必须要有,linux系统最开始的地方,linux系统的唯一入口 、boot 开机启动项,开机的启动文件存放的位置 swap 交换分区,将硬盘上的一部分空间作为内存使用,一般是内存的两倍 root 超级管理员用户&#x…

智能优化算法应用:基于未来搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于未来搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于未来搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.未来搜索算法4.实验参数设定5.算法结果6.…

Python导入模块,Python import用法(超级详细)

对于一个真实的 Python 程序,我们不可能自己完成所有的工作,通常都需要借助于第三方类库。此外,也不可能在一个源文件中编写整个程序的源代码,这些都需要以模块化的方式来组织项目的源代码。 使用 import 导入模块的语法&#xf…

护眼灯对眼睛有好处吗?学生备考台灯分享

孩子的身心健康,永远是作为家长最心的事情,但是现在的青少年近视率如此高的情况下,又应该如何才能更好的保护眼睛呢?也因为这个问题所以才有了现在学生都必备的护眼台灯。护眼台灯相对于传统台灯来说光源更安全,有效保…

LVS最终奥义之DR直接路由模式

1 LVS-DR(直接路由模式) 1.1 LVS-DR模式工作过程 1.客户端通过VIP将访问请求报文(源IP为客户端IP,目标IP为VIP)发送到调度器 2.调度器通过调度算法选择最适合的节点服务器并重新封装数据报文(将源mac地址改为调度器的mac地址&am…

第80讲:GTID全局事务标识符的基本概念以及在Binlog中应用GTID

文章目录 1.GTID的基本概念1.1.为什么要引入GTID1.2.什么是GTID 2.开启GTID全局事务标识符的功能3.模拟产生Binlog日志观察开启GTID功能的区别3.1.模拟产生Binlog日志3.2.观察Binlog日志中的事件信息3.2.观察节点状态有什么变化3.3.观察Binlog日志会有什么变化 4.使用GTID来截取…

计算机基础,以及实施运维工程师介绍

目录 一.实施,运维工程师介绍 1.什么是实施工程师? 实施工程师职责 2.什么是运维工程师? 运维工程师职责 3.实施运维需要的技术 数据库 操作系统 网络 服务器 软件 硬件 网络 二.计算机介绍 CPU 存储器 io 总线 主板 三.操…

韧性生长 共话未来|艾诗、罗曼诺在第二届广州国际品牌节喜获两项殊荣

韧性生长 共话未来|维布络集团旗下品牌艾诗、罗曼诺在第二届广州国际品牌节喜获两项殊荣 12月15日,在广东省市场监督管理局、广州市市场监督管理局、广州市商务局、中国广告协会、中国出版集团东方出版中心的指导下,由广州国际品牌节组委会主…