热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

SpringBoot开启远程调试的方法

这篇文章主要介绍了SpringBoot开启远程调试的方法,帮助大家更好的理解和使用SpringBoot框架,感兴趣的朋友可以了解下

作者:不才陈某

原文链接:https://chenjiabing666.github.io/2020/10/28/SpringBoot

前言

上周末一个朋友庆生,无意间听他说起了近况,说公司项目太多了,每天一堆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=9093 -jar xxx.jar

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

transport

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

  • dt_socket: 采用socket方式连接(常用)
  • dt_shmem:采用共享内存的方式连接,支持有限,仅仅支持windows平台

server

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

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

suspend

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

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

address

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

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

onthrow

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

onuncaught

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

launch

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

timeout

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

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

常用的命令

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

以Socket 方式监听 8000 端口,程序启动阻塞(suspend 的默认值为 y)直到被连接,命令如下:

-agentlib:jdwp=transport=dt_socket,server=y,address=8000

以 Socket 方式监听 8000 端口,当程序启动后 5 秒无调试者连接的话终止,程序启动阻塞(suspend 的默认值为 y)直到被连接。

-agentlib:jdwp=transport=dt_socket,server=y,address=localhost:8000,timeout=5000

选择可用的共享内存连接地址并使用 stdout 打印,程序启动不阻塞。

-agentlib:jdwp=transport=dt_shmem,server=y,suspend=n

以 socket 方式连接到 myhost:8000上的调试程序,在连接成功前启动阻塞。

-agentlib:jdwp=transport=dt_socket,address=myhost:8000

以 Socket 方式监听 8000 端口,程序启动阻塞(suspend 的默认值为 y)直到被连接。当抛出 IOException 时中断调试,转而

执行 usr/local/bin/debugstub程序。

-agentlib:jdwp=transport=dt_socket,server=y,address=8000,Onthrow=java.io.IOException,launch=/usr/local/bin/debugstub

IDEA如何开启远程调试?

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

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9193 -jar debug-demo.jar

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

 

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

 

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

 

配置完毕后点击保存即可,因为我配置的 suspend=n,因此服务端程序无需阻塞等待我们的连接。我们点击 IDEA 调试按钮,当我访问某一接口时,能够正常调试。

 

总结

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

以上就是Spring Boot开启远程调试的方法的详细内容,更多关于Spring Boot开启远程调试的资料请关注其它相关文章!


推荐阅读
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 学习笔记(34):第三阶段4.2.6:SpringCloud Config配置中心的应用与原理第三阶段4.2.6SpringCloud Config配置中心的应用与原理
    立即学习:https:edu.csdn.netcourseplay29983432482?utm_sourceblogtoedu配置中心得核心逻辑springcloudconfi ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
author-avatar
玄天战猫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有