详解JAVA远程debug

news2025/1/12 12:22:36

目录

1.什么是远程debug?

2.远程debug普通JAVA程序

环境

测试程序

程序启动指令

编译器配置

3.远程debug JAVA Web程序

4.远程debug spring boot程序


1.什么是远程debug?

远程debug,也就是可以在本地debug远端部署的程序,这对于定位远端环境中的问题非常有用,之所以我们说是远端环境,而不说是对定位生产环境中的bug很有用,是因为远程调试通常在开发和测试阶段使用,而不建议在生产环境中使用,因为可能会对性能产生影响。当然,在没有办法的时候使用远程debug,是最高效的定位生产问题的手段之一。

远程debug可以理解为一种JVM规范,当然其不是单独的一个规范,它是属于JDWP(Java Debug Wire Protocol)协议中的一部分,该协议定义了 Java 虚拟机(JVM)与调试器之间的交互方式。通过 JDWP,开发者可以在开发工具中设置断点、查看变量、执行代码等操作,以便对运行中的 Java 程序进行调试。说直白点就是遵循了该协议的JVM,就支持debug,也支持远程debug。

2.远程debug普通JAVA程序

2.1.环境

JDK:1.8

编译器:IDEA

2.2.测试程序

这里我们写了很简单一个测试程序,每1秒,i自加1,然后将其打包成jar包

public static void main(String[] args) throws InterruptedException {
        int i=0;
        while (true){
            Thread.sleep(1000);
            i++;
        }
    }

我估计很多同学一下会忘了这么在IDEA中将普通java se程序如何打包成jar了,这里贴心一点,给出打包方法,用打包jar包的maven插件,指定好main入口,然后install即可:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.eryi.Test</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

2.3.程序启动指令

要远程debug,首先在程序启动时就要用参数开启远程debug,完成参数指令如下:

 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<host>:<port>

  • transport:指定调试信息传输的方式,一般使用 dt_socket
  • server:指定是否为调试服务端,使用 y 表示是。
  • suspend:指定是否在启动时暂停,使用 n 表示不暂停。
  • address:指定调试监听的主机和端口,也就是通过该端口来进行远程debug的。

以我们上面的程序为例,完成的启动命令为:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=127.0.0.1:5005 -jar test-1.0-SNAPSHOT.jar

启动成功会显示正在监听debug的端口:

2.4.编译器配置

我们想要在IDEA中远程debug,需要进行配置:

add configurations

 add new configuration—>remote

配置:

开始debug:

可以看到程序进入了断点。

3.远程debug JAVA Web程序

tomcat作为常用的web server为了方便使用,自然也支持了远程debug的功能。普通java程序是用java -jar启动,tomcat是用启动脚本启动,启动脚本里记录的就是tomcat启动要执行的所有命令,远程debug也写在里面。

Windows环境下修改start.sh,在第一行加上以下命令:

export CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=<host>:<port>,server=y,suspend=n"

Linux环境下修改start.bat,在第一行加上以下命令:

set "CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=<host>:<port>,server=y,suspend=n"

4.远程debug spring boot程序

spring boot项目作为一个jar,是可以用java -jar然后跟参数这种启动普通Java程序debug的方式来进行debug的,除此之外,spring boot还提供了一个更方便的远程debug的方式,就是将参数配置在spring boot的打包插件中。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <jvmArguments>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<host>:<port></jvmArguments>
            </configuration>
        </plugin>
    </plugins>
</build>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入浅出:MyBatis的使用方法及最佳实践

这里写目录标题 添加MyBatis框架⽀持配置连接字符串和MyBatis配置连接字符串配置 MyBatis 中的 XML 路径 添加业务代码创建数据库和表添加用户实体类添加 mapper 接⼝添加 UserMapper.xml添加 Service层添加 Controller层 增删改操作增加操作删除操作修改操作 添加MyBatis框架⽀…

vue3+ts+vite全局配置Element-Plus主题色

概述 我找了很多博客&#xff0c;想全局配置Elmenet-Plus组件主题色&#xff0c;但都没有效果。所以有了这篇博客&#xff0c;希望能对你有所帮助&#xff01;&#xff01;&#xff01; 文章目录 概述一、先看效果二、创建全局颜色文件2.1 /src/styles 下新建 element-plus.sc…

王道机组难题分析

第四章 指令系统 大端方式&#xff1a;就是高地址存放高位&#xff0c; LSB的意思是&#xff1a;全称为Least Significant Bit&#xff0c;在二进制数中意为最低有效位 MSB的意思是&#xff1a;全称为Most Significant Bit&#xff0c;在二进制数中属于最高有效位 操作数可以理…

设备工单管理系统如何实现工单流程自动化?

设备工单管理系统属于工单系统的一种&#xff0c;基于其丰富的功能&#xff0c;它可以同时处理不同的多组流程&#xff0c;旨在有效处理发起人提交的事情&#xff0c;指派相应人员完成服务请求和记录全流程。该系统主要面向后勤管理、设备维护、物业管理、酒店民宿等服务行业设…

微服务07-分布式缓存

前提: 单机的Redis存在四大问题: 解决办法:基于Redis集群解决单机Redis存在的问题 1、Redis持久化 Redis有两种持久化方案: RDB持久化AOF持久化1.1 RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所…

redis的基础命令01

1、操作库的指令 1、清除当前库---flushdb 2、清除所有库---flushAll 2、操作key的指令 最常用的指令get、set 1&#xff09;set key value 2&#xff09;get key 基础指令 1、del 删除单个&#xff1a;del key 、批量删除&#xff1a;del key1 key2 key3 2、exists 判断key是否…

jpa查询返回自定义对象、返回指定VO、POJO

jpa查询返回自定义对象、返回指定VO、POJO jpa查询返回自定义对象、返回指定VO、POJO&#xff0c;JPA查询前会做大量处理&#xff0c;还有线程通知的操作。若并发大&#xff0c;处理性能直线下降。但是jpa就因为做了大量处理&#xff0c;对多数据库兼容极好&#xff0c;操作方…

QT之UDP通信

QT之UDP通信 UDP不分客户端口服务器,只需要使用一个类QUdpSocket QT += core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = udp TEMPLATE = app# The following define makes your compiler emit warnings if you use # any feature of Qt …

通义大模型:打造更智能、更灵活的自然语言处理技术

大家好&#xff0c;今天我想向大家介绍一款备受瞩目的自然语言处理技术——通义大模型。作为一种基于深度学习的人工智能技术&#xff0c;通义大模型能够模拟人类的思维方式&#xff0c;实现更智能、更灵活的自然语言处理&#xff0c;为我们的生活和工作带来了极大的便利。 在…

Java解决四大查找(一)

Java解决四大查找 一.线性查找1.1 题目1.2 思路分析1.3 代码演示 二.二分查找(双指针法)2.1 题目2.2 思路分析(图解加文字)2.3 代码演示 一.线性查找 1.1 题目 在数组{1&#xff0c;8&#xff0c;1024&#xff0c;521&#xff0c;1889}中查找数字8&#xff0c;如果有&#xff…

数学建模(二)线性规划

课程推荐&#xff1a;6 线性规划模型基本原理与编程实现_哔哩哔哩_bilibili 在人们的生产实践中&#xff0c;经常会遇到如何利用现有资源来安排生产&#xff0c;以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支&#xff1a;数学规划。而线性规划(Linear Program…

基于 FPGA 的电机控制

FPGA 非常适合精密电机控制&#xff0c;在这个项目中&#xff0c;我们将创建一个简单的电机控制程序&#xff0c;在此基础上可以构建更复杂的应用。 需要的硬件 Digilent Pmod HB3 介绍 我们可以用一个简单的 8 位微控制器来控制电机&#xff0c;输出一个简单的脉宽调制波形。然…

201、仿真-基于51单片机PT100测温设计铂电阻温度计设计Proteus仿真(程序+Proteus仿真+原理图+流程图+元器件清单+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、设计功能 二、Proteus仿真图 三、原理图 四、程序源码 资料包括&#xff1a; 方案选择 单片机的选择 方案一&#xff1a;STM32系列单片机控制&#xff0c;该型号单片机为LQFP44封装&#xff0c;内部资源足够用于本次设…

Linux学习之sed保持空间

echo 1#sed#s >> holdSpaceTest.txt echo 2#deep#d >> holdSpaceTest.txt echo 3#good#g >> holdSpaceTest.txt echo 4#hood#h >> holdSpaceTest.txt把下边的内容写入到holdSpaceTest.txt中&#xff1a; 1#sed#s 2#deep#d 3#good#g 4#hood#htac holdS…

windows任务栏右下角不显示网络图标解决方法

1、背景 我运行windows诊断服务之后&#xff0c;然后重启了一把电脑&#xff0c;结果发现电脑无法上网了&#xff0c;进一步发现任务栏右下角的网络显示图标也没有了&#xff0c;网络状态显示也是一条横线。 几经折腾终于给解决了&#xff0c;遇到了不少坑&#xff0c;记录一…

2022年09月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:指定顺序输出 依次输入3个整数a、b、c,将他们以c、a、b的顺序输出。 时间限制:1000 内存限制:65536 输入 一行3个整数a、b、c,以空格分隔。 0 < a,b,c < 108 输出 一行3个整数c、a、b,整数之间以一个空格分隔。 样例输入 1 2 3 样例输出 3 1 2 以下是使用C语言…

腾讯出品Pag动画框架在Android端的使用-初级

Pag动画框架作为一个第三方框架&#xff0c;它的优缺点与Lottie是相似&#xff0c;此处不过多赘述。如果你们的项目中打算用了&#xff0c;肯定是经过了一定的调研的。Pag动画框架分几个版本&#xff0c;有免费的有收费的。我们目前用的社区免费版&#xff0c;只用来展示Pag动画…

Vue2到3 Day5 全套学习内容,众多案例上手(内付源码)

简介&#xff1a; Vue2到3 Day1-3 全套学习内容&#xff0c;众多案例上手&#xff08;内付源码&#xff09;_星辰大海1412的博客-CSDN博客本文是一篇入门级的Vue.js介绍文章&#xff0c;旨在帮助读者了解Vue.js框架的基本概念和核心功能。Vue.js是一款流行的JavaScript前端框架…

工单管理系统哪家好?如何让学校后勤报修更方便?

随着互联网的高速发展&#xff0c;学校宿舍管理也必须随之向数字化方向迈进。越来越多的企业利用云计算服务的优势&#xff0c;使后勤维护整个流程实现数字化、自动化运行以及资源共享。这些技术创新的运用&#xff0c;大大提高了学校宿舍的后勤维修管理水平&#xff0c;同时&a…

WinForm内嵌Unity3D

Unity3D可以C#脚本进行开&#xff0c;使用vstu2013.msi插件&#xff0c;可以实现在VS2013中的调试。在开发完成后&#xff0c;由于项目需要&#xff0c;需要将Unity3D嵌入到WinForm中。WinForm中的UnityWebPlayer Control可以载入Unity3D。先看效果图。 一、为了能够动态设置ax…