详解JAVA远程debug

2023-08-13 01:38:41

目录

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>

更多推荐

第十届国家网络安全宣传周今日在全国范围内启动

十届国家网络安宣传周回望2023年国家网络安全宣传周于9月11日至17日在全国范围内统一开展。其中,开幕式等重要活动在福建省福州市举行。第一届国家网络安全宣传周活动始于2014年,此后将每年9月的第三周定为活动举行日。网络安全宣传周至今已经走过10个年头。作为网络安全界的盛会,每一年都是嘉宾云集,大咖齐聚,展示前言技术

MySQL索引、事务、事务与存储引擎

1、索引1.1索引的概念●索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。●使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,因此能加快数据库的查询速度。●索引就好比是一本书的

VLANIF配置

目录实验原理:案例:设备配置用ping验证不同vlan之间实现相互通信实验原理:VLANIF接口是一种第三层的逻辑接口,用于在第三层实现不同VLAN之间的通信。每个VALN有一个VLANIF接口,并通过该接口在网络层转发VLAN通信。由于每个VLAN是一个广播域,每个VLAN可以被看作是一个IP网段,因此可以把VLAN

ChatGPT所引用的参考文献根本不存在?如何正确使用AI工具?

从ChatGPT推出以来,一直都是一个热点话题,尤其是在高等教育领域,大家展开了非常激烈的讨论。巴斯大学对ChatGPT进行测试时发现,ChatGPT生成的论文,其参考文献的引用格式看起来很完美,有作者姓名和期刊名称,甚至标题听起来都很专业,但这篇论文压根儿就不存在。一方面,ChatGPT可以在很大程度上帮助学生对知识

SQL注入类型判断

SQL注入的类型分为字符型和数字型,以sqli-labs靶场1、2关为例:文章目录第一关第二关无错误回显的判断第一关第一关注入一个1’,错误回显出下面内容,其中1’是注入的内容,0,1后面的单引号和最前面的单引号是一对,剩下的两个单引号是一对,错误回显出上面内容说明是字符型注入。''1''LIMIT0,1'第二关第二关

Bigemap在市政工程设计给排水行业的应用场景?

去年单位采购的,今年11月份才分配给我使用。使用场景:现场定位:通过我们电脑导入cad图纸数据,根据需求可以画一些简单的示意路线,发送到手机进行现场比对,最后会在cad里面加入管道设计方案。去年单位采购的,今年11月份才分配给我使用。使用场景:现场定位:通过我们电脑导入cad图纸数据,根据需求可以画一些简单的示意路线,

Vue的详细教程--用Vue-cli搭建SPA项目

Vue的详细教程--用Vue-cli搭建SPA项目1.Vue-cli是什么2.什么是SPA项目1.vueinitwebpackspa2.一问一答模式2:运行完上面的命令后,我们需要将当前路径改变到SPA这个文件夹内,然后安装需要的模块此步骤可理解成:maven的web项目创建成功后,修改pom文件添加依赖3.启动并访问

MYSQL--索引

目录一、索引的概念:二、索引的作用:三、索引的缺点:四、创建索引的原则依据:五、索引的分类和创建:1.普通索引:2.唯一索引:3.主键索引:4.组合索引:5.全文索引:六、查看删除索引:1.查看索引:2.删除索引:一、索引的概念:索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于

SpringSecurity 初始化解析

文章目录前言加载SpringSecurity配置解析配置SpringSecurity解析器security:http解析FilterChainProxy的注册过程创建SpringSecurity过滤器总结前言通过上文分析知道了SpringSecurity对一个请求的具体处理流程。不知道大家是否跟我一样都有几个疑问:Fi

已知我有一个表格里有编号状态和名称的列,如何转换为目标样式?

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤此臣所以报先帝而忠陛下之职分也。大家好,我是皮皮。一、前言前几天在Python最强王者交流群【黑科技·鼓包】问了一个Python自动化办公的问题,一起来看看吧。请教一下PANDA库的问题:已知我有一个表格里

字符串(字符数组)的各种操作功能

利用C语言编程平台以及所学的编程知识,完成以下工作:采用菜单形成,通过菜单项(1;2;3;......)等选择方式,分别实现以下对字符串(字符数组)的各种操作功能:初始化字符串(字符数组)A[],B[],C[]等,并键盘录入,要求字符串(字符数组)以’\0’为结束标志;调用自己编写的函数intlength(CharA[

热文推荐