还在为线上BUG苦苦找寻?试试IntelliJ IDEA远程调试线上Java程序

在这里插入图片描述

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》专栏主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程
🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

还在为线上BUG苦苦找寻?试试IntelliJ IDEA远程调试线上Java程序

  • 前言
  • 远程调试的原理
    • JDWP(Java Debug Wire Protocol)
  • 开始配置
    • ❶ 构建项目并配置启动参数部署
    • ❷ 配置 IntelliJ IDEA
    • ❸ 测试远程调试
  • 总结

前言

相信很多小伙伴开发项目中,本地开发环境运行好好的,但在生产环境就会出现某些BUG,而定位复现BUG又成了开发者最苦恼的事情,且这是一个非常耗费时间且低效的过程,需要解决这个问题,那么我就需要借助 Java 调试线协议(JDWP)开启远程调试,可以直接将线上项目在本地代码上Debug

远程调试是我们开发者日常工作中的重要技能之一,它可以帮助我们在生产环境中直接调试运行中的应用程序,快速发现并解决问题。博主将给大家将详细介绍在 IntelliJ IDEA 中如何进行远程调试 Java 程序。

远程调试的原理

远程调试是指通过开发工具(如 IntelliJ IDEA)连接到远程运行的 Java 应用程序,从而在本地进行断点设置、变量查看和执行流程控制等调试操作。Java 提供了一套标准的调试协议(JDWP - Java Debug Wire Protocol),允许调试器(IDE)与被调试程序(应用)之间进行通信。

JDWP(Java Debug Wire Protocol)

JDWP 是 Java 平台调试架构(JPDA)的一部分,它定义了调试器与 Java 虚拟机(JVM)之间通信的标准协议。JPDA 包括三部分:

  • Java 虚拟机工具接口(JVMTI):JVM 级别的接口,用于监视和控制 Java 程序的执行
  • Java 调试接口(JDI):高级Java API,供调试器使用,提供用户友好的调试功能
  • Java 调试线协议(JDWP):调试器和 JVM 之间的通信协议

JDWP 负责在调试器和 JVM 之间传递调试命令和事件通知,包括设置断点单步执行查看变量等操作。

  • 调试器启动:IDE 启动调试器,并配置要连接的远程主机和端口
  • 应用启动:Java 应用以调试模式启动,并监听指定的端口
  • 建立连接:调试器与远程 JVM 通过套接字(Socket)建立连接
  • 协议通信:调试器通过 JDWP 向 JVM 发送调试命令,JVM 处理命令并返回结果

工作中我们的调试流程可能如下图:
在这里插入图片描述

开始配置

❶ 构建项目并配置启动参数部署

首先构建我们的 Spring Boot 项目,简单创建一个接口

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class JDWPController {

    @GetMapping("/jvm")
    public String testJvm(){
        System.out.println("调试进入");
        System.out.println("使用循环为了测试进行远程调试时远程程序依然是运行的状态");
        int count = 0;
        for (int i = 0; i < 10; i++) {
            try {
                count++;
                System.out.println("count:" + count);
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return "success";
    }
}

maven 打包构建项目,将 jar 文件在另外一台虚拟机上启动运行,命令如下
your-application.jar 替换你的 jar 包名称

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar your-application.jar

参数解释

  • -agentlib:jdwp:启用 JDWP 调试代理
  • transport=dt_socket:使用套接字进行通信
  • tserver=y:开启调试服务器模式
  • suspend=n:应用启动后不暂停,立即运行
  • address=*:5005:调试服务器监听在 5005 端口上(自行修改自己需要端口)

在这里插入图片描述
出现上图端口监提示,表示开启远程调试并且远程端口是5005

❷ 配置 IntelliJ IDEA

在项目中进行以下配置 Edit Configurations
在这里插入图片描述
弹出窗口 点击左上角的 + 号,选择 Remote JVM Debug,创建一个新的远程调试配置

在这里插入图片描述
主要简单配置几个参数 ,配置如下:
在这里插入图片描述
设置我们需要测试的接口断点,开启远程调试
在这里插入图片描述
温馨提示

如果出现 Unable to open debugger port 错误,是因为我们的远程服务器端口未开放
在这里插入图片描述
开放端口,博主以本地虚拟机 centos 为例:

# 开放5005端口
firewall-cmd --zone=public --add-port=5005/tcp --permanent

#重启firewall
systemctl restart firewalld

#查看开放端口
firewall-cmd --zone=public --list-ports

❸ 测试远程调试

上述步骤都完成且通过后,访问我们的测试接口 http://192.168.1.22:9090/api/jvm ,可以看到已经进入了我们本地代码的DEBUG

在这里插入图片描述

总结

通过本文的介绍,相信小伙伴们应该已经了解了在 IntelliJ IDEA 中进行远程调试 Java 程序的基本原理和具体步骤。

本文的代码主要是演示使用,小伙伴们可以根据自己业务需求进行修改升级。如果本文对您有所帮助,希望 一键三连 给博主一点点鼓励,如果您有任何疑问或建议,请随时留言讨论。


在这里插入图片描述

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

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

相关文章

持续警惕火灾风险:学校可燃气体报警器的定期校准检验

可燃气体报警器在学校中的安装、检验和校准对于保护师生生命安全至关重要。 接下来&#xff0c;佰德将探讨可燃气体报警器在学校中的必要性&#xff0c;以及相关实际案例和数据&#xff0c;为您呈现一个安全的学习环境。 一、学校安全不能掉以轻心 学校是培养未来的摇篮&…

还不会线程池?JUC线程池源码级万字解析

线程池主要解决了两个问题&#xff1a; 第一个是当大量执行异步任务的时候提供较好的性能&#xff1b;在不使用线程池的时候&#xff0c;每次需要执行一个异步任务都需要新建一个 Thread 来进行&#xff0c;而线程的创建和销毁都是需要时间的&#xff0c;所以可以通过线程池来实…

6.7.11 一种新的迁移学习方法可提高乳房 X 线摄影筛查中乳腺癌的诊断率

分割是一种将图像分割成离散区域的技术&#xff0c;以便将感兴趣的对象与周围环境分开。为了制定治疗计划&#xff0c;分割可以帮助医生测量乳房中的组织量。 二元分类问题的目的是将输入数据分为两组互斥的数据。在这种情况下&#xff0c;训练数据根据要解决的问题以二进制格…

HTML静态网页成品作业(HTML+CSS)—— 24节气立夏介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

反射型xss靶场练习

反射型xss危害小&#xff0c;这里使用的xss靶场是常用的xss靶场&#xff1a;xss-labs。 当我们完成弹窗后就通过该关卡&#xff0c;说该关卡存在xss的一个漏洞并且可以解析js代码。 第一关&#xff1a; 这里没有过滤我们输入的代码&#xff1a;直接将js代码放在js代码中&a…

SQL学习小记(五)解决python连接Oracle数据库及出现的问题

python运行时出现错误DPI-1047: Cannot locate a 64-bit Oracle Client library: “The specified module could not be 解决python连接Oracle数据库及出现的问题 1. 配置本地Oracle的path2. python10的详细安装过程2.1. python10下载2.2. python10安装2.3.额外操作 3. python…

ARM功耗管理之功耗状态及功耗模式

安全之安全(security)博客目录导读 目录 一、功耗状态定义 ​编辑二、功耗模式定义 三、功耗状态和功耗模式区别 四、功耗模式细分 五、功耗状态细分 1、Core功耗状态 2、Cluster功耗状态 3、设备功耗状态 4、SoC功耗状态 5、功耗状态举例 思考:功耗状态?功耗模式…

论文复现:Track to Detect and Segment: An Online Multi-Object Tracker

论文下载链接&#xff1a;链接 简单介绍&#xff1a;大多数在线多目标跟踪器在神经网络中独立执行目标检测&#xff0c;无需任何跟踪输入。在本文中提出了一种新的在线联合检测和跟踪模型TraDeS&#xff08;TRAck to DEtect and Segment&#xff09;&#xff0c;利用跟踪线索…

Git从入门到放弃

由于我的Git学的不太好&#xff0c;所以为了能够将以后我的学习笔记能够整理的更好&#xff0c;我先要系统的学习一下git&#xff0c;文章由此产生。 文章笔记源自尚硅谷Git入门到精通全套教程视频内容 1 进入官网 学习新技术的第一步需要熟悉官网&#xff0c;Git也不例外。ht…

纷享销客安全体系:安全合规认证

安全合规认证是指组织通过独立的第三方机构对其信息系统和数据进行评估和审查&#xff0c;以确认其符合相关的安全标准、法律法规和行业要求的过程。 安全合规认证可以帮助组织提高信息系统和数据的安全性&#xff0c;并向客户、合作伙伴和监管机构证明其符合相关的安全标准和…

✔️Vue基础+

✔️Vue基础 文章目录 ✔️Vue基础computed methods watchcomputed计算属性methods计算属性computed计算属性 VS methods方法计算属性的完整写法 watch侦听器&#xff08;监视器&#xff09;watch侦听器 Vue生命周期Vue生命周期钩子 工程化开发和脚手架脚手架Vue CLI 项目目录介…

HarmonyOS(二十三)——HTTP请求实战一个可切换的头条列表

在前一篇文章&#xff0c;我们已经知道如何实现一个http请求的完整流程&#xff0c;今天就用官方列子实战一个简单的新闻列表。进一步掌握ArkTS的声明式开发范式&#xff0c;数据请求&#xff0c;常用系统组件以及touch事件的使用。 主要包含以下功能&#xff1a; 数据请求。…

独立游戏之路 -- 获取OAID提升广告收益

Unity 之 获取手机&#xff1a;OAID、IMEI、ClientId、GUID 前言一、Oaid 介绍1.1 Oaid 说明1.2 移动安全联盟(MSA) 二、站在巨人的肩膀上2.1 本文实现参考2.2 本文实现效果2.3 本文相关插件 三、Unity 中获取Oaid3.1 查看实现源码3.2 工程配置3.3 代码实现3.4 场景搭建 四、总…

金融科技:跨境支付的新引擎,开启全球化支付新时代

一、引言 在全球经济一体化的今天,跨境支付作为连接各国经贸往来的重要桥梁,其便捷性、安全性和效率性成为了各国企业和消费者关注的焦点。金融科技,作为现代金融与传统科技深度融合的产物,正以其独特的创新力和推动力,成为跨境支付领域的新引擎,引领着全球化支付新时代…

基于SSM的旅游民宿预定系统【源码】【运行教程】

基于SSM的旅游民宿预定系统 一、项目介绍1. 游客功能2. 管理员功能3. 高级功能 二、项目技术栈三、项目运行四、项目演示总结 大家好&#xff0c;这里是程序猿代码之路&#xff01;随着旅游业的快速发展&#xff0c;民宿作为一种独特的住宿方式越来越受到游客的喜爱。为了提升用…

Android端信号处理总结

最早之前不管是视频录制还是视频直播&#xff0c;都是从麦克风获取音频后&#xff0c;直接交编码器&#xff0c;封装复用到不同媒体格式。在后面在IM场景中做短语音消息、短语音消息转文本以及语音输入设计到语音识别&#xff0c;也仍然是直接从麦克风拿数据。在整个语音SDK设计…

【JavaScript】内置对象 - 字符串对象 ④ ( 根据索引位置返回字符串中的字符 | 代码示例 )

文章目录 一、根据索引位置返回字符串中的字符1、charAt 函数获取字符2、charCodeAt 函数获取字符 ASCII 码3、数组下标获取字符 String 字符串对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String 一、根据索引位置返回…

新火种AI|超越苹果成为市值第二大公司!英伟达的时代已然来临...

美东时间周三&#xff08;6月5日&#xff09; &#xff0c;人工智能领域的龙头公司英伟达开始发力&#xff0c;其股票实现大涨&#xff0c;幅度超过5 %&#xff0c;刷新历史新高。更重要的是&#xff0c;历经了这一波的上涨&#xff0c;英伟达的市值突破了3万亿美元。截至当日收…

嵌入式 Linux LED 驱动开发实验学习

I.MX6U-ALPHA 开发板上的 LED 连接到 I.MX6ULL 的 GPIO1_IO03 这个引脚上&#xff0c;进行这个驱动开发实验之前&#xff0c;需要了解下地址映射。 地址映射 MMU 全称叫做 MemoryManage Unit&#xff0c;也就是内存管理单元。在老版本的 Linux 中要求处理器必须有 MMU&#x…

香港电讯荣获广东省香港商会「2023金领航奖」

&#x1f389;近日&#xff0c;由香港贸易发展局与广东省香港商会联合主办的「粤港服务业合作交流会 暨 2023金领航奖颁奖典礼」在广州举行&#xff0c;香港电讯非常荣幸获颁「卓越企业大奖」&#x1f3c6; &#x1f3c6;「金领航奖」由广东省香港商会于2018年创办&#xff0c;…