惊呆了!SpringBoot还能开启远程调试?

持续原创输出,点击上方蓝字关注我

  • 前言
  • 什么是远程调试?
  • 为什么要远程调试?
  • 什么是JPDA?
  • 如何开启调试?
  • transport
  • server
  • suspend
  • address
  • onthrow
  • onuncaught
  • launch
  • timeout
  • 常用的命令
  • IDEA如何开启远程调试?
  • 总结

上周末一个朋友庆生,无意间听他说起了近况,说公司项目太多了,每天一堆BUG需要修复,项目来回切换启动,真是挺烦的。

随着项目越来越多,特别是身处外包公司的朋友,每天可能需要切换两三个项目,难道一有问题就本地启动项目调试?

今天这篇文章就来介绍一下什么是远程调试, Spring Boot如何开启远程调试?

什么是远程调试?

所谓的远程调试就是服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码( 前提是本地的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道远程服务端的此时的内部状态。

简单的意思:本地无需启动项目的状态下能够实时调试服务端的代码。

为什么要远程调试?

随着项目的体量越来越大,启动的时间的也是随之增长,何必为了调试一个BUG花费十分钟的时间去启动项目呢?你不怕老大骂你啊?

什么是JPDA?

JPDA(Java Platform Debugger Architecture),即 Java 平台调试体系,具体结构图如下图所示:

其中实现调试功能的主要协议是 JDWP协议,在 Java SE 5 以前版本,JVM 端的实现接口是 JVMPI(Java Virtual Machine Profiler Interface),而在 Java SE 5及以后版本,使用 JVMTI(Java Virtual Machine Tool Interface) 来替代 JVMPI。

因此,如果你使用的是 Java SE 5之前的版本,则使用的调试命令格式如下:

java -Xdebug -Xrunjdwp:...

如果你使用的是 Java SE 5之后的版本,则使用的命令格式如下:

java -agentlib:jdwp=...

如何开启调试?

由于现在使用的大多数都是 Java SE 5之后的版本,则之前的就忽略了。

日常开发中最常见的开启远程调试的命令如下:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<span class="hljs-number">9093</span> -jar xxx.jar

前面的 java -agentlib:jdwp=是基础命令,后面的跟着的一串命令则是可选的参数,具体什么意思呢?下面详细介绍。

指定运行的被调试应用和调试者之间的通信协议,有如下可选值:

指定当前应用作为调试服务端还是客户端,默认的值为 n(客户端)。

如果你想将当前应用作为被调试应用,设置该值为 y;如果你想将当前应用作为客户端,作为调试的发起者,设置该值为 n

当前应用启动后,是否阻塞应用直到被连接,默认值为 y(阻塞)。

大部分情况下这个值应该为 n,即不需要阻塞等待连接。一个可能为 y的应用场景是,你的程序在启动时出现了一个故障,为了调试,必须等到调试方连接上来后程序再启动。

对外暴露的端口,默认值是 8000

注意:此端口不能和项目同一个端口,且未被占用以及对外开放。

这个参数的意思是当程序抛出指定异常时,则中断调试。

当程序抛出未捕获异常时,是否中断调试,默认值为 n

当调试中断时,执行的程序。

超时时间,单位 ms(毫秒)

suspend = y 时,该值表示等待连接的超时;当 suspend = n 时,该值表示连接后的使用超时。

常用的命令

下面列举几个常用的参考命令,这样更加方便理解。

-agentlib:jdwp=transport=dt_socket,server=y,address=<span class="hljs-number">8000</span>
-agentlib:jdwp=transport=dt_shmem,server=y,suspend=n
-agentlib:jdwp=transport=dt_socket,address=myhost:<span class="hljs-number">8000</span>
-agentlib:jdwp=transport=dt_socket,server=y,address=<span class="hljs-number">8000</span>,onthrow=java.io.IOException,launch=/usr/local/bin/debugstub

IDEA如何开启远程调试?

首先的将打包后的 Spring Boot项目在服务器上运行,执行如下命令(各种参数根据实际情况自己配置):

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<span class="hljs-number">9193</span> -jar debug-demo.jar

项目启动成功后,点击 Edit Configurations,在弹框中点击 + 号,然后选择 Remote

然后填写服务器的地址及端口,点击 OK 即可。

以上步骤配置完成后,点击DEBUG调试运行即可。

每天一个小知识,今天你学到了吗?

另外作者为大家准备接近 10M的面筋,涵盖后端的各个层面,老规矩,公号内回复 Java&#x9762;&#x8BD5;&#x5B9D;&#x5178;即可获取。

Original: https://www.cnblogs.com/Chenjiabing/p/13896121.html
Author: 爱撒谎的男孩
Title: 惊呆了!SpringBoot还能开启远程调试?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/711251/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • NoteOfMySQL-11-权限管理

    一、权限系统 MySQL数据库中使用3种不同类型的安全检查:登录验证、授权、访问控制。 二、权限表 MySQL权限表存储在名为mysql的数据库中,常用的表有user、db、tab…

    技术杂谈 2023年7月11日
    075
  • 免费公测 标贝声音理解,检测声音性别和年龄

    古有听声辨位,今有听声”识”人。说到声音,其本质是不同频率声音的集合,以波的形式振动(震动)传播。由于每个人的发声器官(口腔、鼻腔、声带)各不相同,因此每个…

    技术杂谈 2023年7月25日
    059
  • python安装各种库的镜像

    让python pip使用国内镜像#国内源:#清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:https://mirrors.ali…

    技术杂谈 2023年7月24日
    060
  • IntelliJ IDEA 2017 永久注册方法

    首先下载:JetbrainsCrack-2.6.10-release-enc.rar rover12421大神开发的下载好后改一下后缀.jar 然后放入到IDEA安装bin目录 在…

    技术杂谈 2023年6月21日
    0115
  • 2022美团Java后端开发春招实习面经

    ​ 五层架构:应用层、运输层、网络层、数据链路层、物理层 ​ HTTP 是超⽂本传输协议,也就是HyperText Transfer Protocol ​ HTTP协议拆解为超文本…

    技术杂谈 2023年7月10日
    058
  • Kubernetes 升级至 1.24 并将 container runtime 切换至 containerd

    Kubernetes 1.24 于 2022 年 5 月 3 日正式发布(详见 Kubernetes 1.24: Stargazer),1.24 版本的一个重大变化是从 kubel…

    技术杂谈 2023年5月30日
    058
  • html大文件分段传输

    总结一下大文件分片上传和断点续传的问题。因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况。http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,ht…

    技术杂谈 2023年5月30日
    099
  • 设计模式-桥接模式

    类型:结构型 目的:通过抽离出多个维度相互组合(聚合)来代替继承,简化系统。 话不多说,看个优化案例。 优化案例 现有系统中,对于画面窗口的边框有一套样式来控制是否有圆角。因为新的…

    技术杂谈 2023年7月11日
    054
  • JDBC事务2

    Class.forName("com.mysql.jdbc.Driver"); public class Driver extends NonRegisteri…

    技术杂谈 2023年5月30日
    078
  • NO.3Linux-笔记

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月24日
    049
  • 超详细的SpringBoot框架入门教程

    Spring Boot 框架快速入门教程以大量示例讲解了 Spring Boot 在各类情境中的应用,让大家可以跟着老师的思维和代码快速理解并掌握。适用于 Java 开发人员,尤其…

    技术杂谈 2023年7月25日
    066
  • Java 中HashMap详解(含HashTable, ConcurrentHashMap)

    本篇重点: 1.HashMap的存储结构 2.HashMap的put和get操作过程 3.HashMap的扩容 4.关于transient关键字 5.HashMap, HashTa…

    技术杂谈 2023年6月21日
    089
  • INNO安装卸载自动结束进程插件使用

    [Code] //安装前判断是否有进程正在运行,istask.dll文件与打包的exe文件一起function RunTask(FileName: string; bFullpat…

    技术杂谈 2023年5月31日
    0103
  • 大流量、业务效率?从一个榜单开始

    原创不易,求分享、求一键三连 业务场景 之前在一家直播团队做过一段时间的营收部门负责人,榜单是直播平台最通用的一种玩法,可以彰显用户的身份,刺激用户之间的pk,从而增加平台的营收,…

    技术杂谈 2023年6月1日
    065
  • 分布式ID 生成方案

    作者:shmilychen,腾讯 IEG 后开开发工程师 在业务开发中,会存在大量的场景都需要唯一 ID 来进行标识。比如,用户需要唯一身份标识;商品需要唯一标识;消息需要唯一标识…

    技术杂谈 2023年5月31日
    076
  • 什么是WordPress

    首先,假设您没有WordPress的经验; 我将从基础开始。 在本教程中,我将回答问题:”什么是WordPress?” 在这篇文章中,我将说明您可以在哪里获…

    技术杂谈 2023年7月11日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球