SpringBoot之DEBUG远程调试黑科技?

news/2024/4/27 3:00:02/文章来源:https://blog.csdn.net/qq_45740561/article/details/129133024

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

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

为什么要远程调试?

随着项目的体量越来越大,启动的时间的也是随之增长,甚至远程DEBUG更能反映出真实业务环境下可能出现的问题,毕竟平常开发大多在windows或mac环境,部署时使用的一般是linux,个别情况下的兼容问题可能是致命的,且非常难以排查,因此远程DEBUG就非常有必要。

如何开始调试?

  • 如果使用的是 Java SE 5 之前的版本,则使用的调试命令格式如下:java -Xdebug -Xrunjdwp:...
  • 如果你使用的是 Java SE 5 之后的版本,则使用的命令格式如下:java -agentlib:jdwp=...

现在开发基本是java5之后的版本,日常开发中最常见的开启远程调试的命令如下:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:9093 -jar xxx.jar
transport指定运行的被调试应用和调试者之间的通信协议
server如果你想将当前应用作为被调试应用,设置该值为y;如果你想将当前应用作为客户端,作为调试的发起者,设置该值为n(默认值)。
suspend当前应用启动后,是否阻塞应用直到被连接,默认值为y(阻塞),大部分情况下这个值应该为n,即不需要阻塞等待连接。
address对外暴露的端口,默认值是8000注意:此端口不能和项目同一个端口,且未被占用以及对外开放。
onthrow这个参数的意思是当程序抛出指定异常时,则中断调试。
onuncaught当程序抛出未捕获异常时,是否中断调试,默认值为n
launch当调试中断时,执行的程序。
timeout超时时间,单位ms(毫秒

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

transport

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

常用的命令

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

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

    -agentlib:jdwp=transport=dt_socket,server=y,address=8000
    
  2. Socket 方式监听 8000 端口,当程序启动后 5 秒无调试者连接的话终止,程序启动阻塞(suspend 的默认值为 y)直到被连接。

    -agentlib:jdwp=transport=dt_socket,server=y,address=localhost:8000,timeout=5000
    
  3. 选择可用的共享内存连接地址并使用 stdout 打印,程序启动不阻塞。

    -agentlib:jdwp=transport=dt_shmem,server=y,suspend=n
    
  4. socket 方式连接到 myhost:8000上的调试程序,在连接成功前启动阻塞。

    -agentlib:jdwp=transport=dt_socket,address=myhost:8000
    
  5. 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/远程JVM调试

image-20230123173221728

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

image-20230123214633932

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

image-20230123214729380

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

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

相关文章

10.现代循环神经网络

10.现代循环神经网络 目录 门控循环单元(GRU)门控隐状态 重置门和更新门候选隐状态 隐状态从零开始实现 初始化模型参数定义模型训练与预测 简洁实现总结 长短期记忆网络(LSTM) 门控记忆元 输入门、忘记门和输出门候选记忆元记忆…

论文复现:模拟风电不确定性——拉丁超立方抽样生成及缩减场景(Matlab)

风电出力的不确定性主要源于预测误差,而研究表明预测误差(e)服从正态分布且大概为预测出力的10%。本代码采用拉丁超立方抽样实现场景生成[1,2]、基于概率距离的快速前代消除法实现场景缩减[3],以此模拟了风电出力的不确定性。 1 …

蓝桥杯刷题025——推导部分和(加权并查集)

2022省赛 问题描述 对于一个长度为 N 的整数数列 ​, 小蓝想知道下标 l 到 r 的部 分和是多少? 然而, 小蓝并不知道数列中每个数的值是多少, 他只知道它的 M 个部分和 的值。其中第 i 个部分和是下标 ​ 到 的部分和 , 值是 。 输入格式 第一行包含 3 个整数 N、M 和 Q 。分…

基于DSP+FPGA的机载雷达伺服控制系统的硬件设计与开发

机载雷达是以飞机为载体的各种雷达天线的总称,主要用于空中侦察、警戒、保 证航行准确与安全[1]。随着航空航天技术的飞速发展,以及微电子、计算机和高速集 成电路等新型技术在军事领域的广泛应用[2],各国都研制出了许多新型战机和导弹,机 载…

企业微信的聊天机器人来了,免费下载(Python版)

大家好,这里是程序员晚枫,个人网址:python-office.com 上次分享了微信机器人的视频以后,视频下面有一个热门评论: 什么时候开发企业版微信机器人?自动回复、自动群发等等~ 在经历了一段时间的查找和开发以…

【基础算法】之 冒泡排序优化

冒泡排序思想基本思想: 冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来(假设从小到大),即为较大的数慢慢往后排,较小的数慢慢往前排。直观表达,每一趟遍历,…

Docker----------day3

常规安装大体步骤 1.安装tomcat 1.查找tomcat docker search tomcat2.拉取tomcat docker pull tomcat3.docker images查看是否有拉取到的tomcat 4.使用tomcat镜像创建容器实例(也叫运行镜像) docker run -it -p 8080:8080 tomcat5.新版tomcat把webapps.dist目录换成webapp…

【大数据离线开发】7.4 HBase数据保存和过滤器

7.4 数据保存的过程 注意:数据的存储,都需要注意Region的分裂 HDFS:数据的平衡 ——> 数据的移动(拷贝)HBase:数据越来越多 ——> Region的分裂 ——> 数据的移动(拷贝) …

清理bib文件(删除重复项,仅保留tex中引用的条目)

在写latex文件的过程中,经常会遇到添加了一堆文献的bibtex到bib文件中,有时候文章一长同一篇文献用不同的cite-key引用了多次,同时也会有一些文献最后并没被正文引用,这就需要对bib文件进行清理。 删除重复项 可以用JabRef 在J…

经理与员工工资关系-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)

【案例4-6】经理与员工工资案例(利用多态实现) 欢迎点赞关注收藏 【案例介绍】 案例描述 某公司的人员分为员工和经理两种,但经理也属于员工中的一种,公司的人员都有自己的姓名和地址,员工和经理都有自己的工号、工…

不同投票需要的不同上传方式outlook 投票功能怎么设置投票 html5

“艺空间手造坊”网络评选投_投票方式的选择_免费图文教学投票教学关于微信投票,我们现在用的最多的就是小程序投票,今天的网络投票,在这里会教大家如何用“活动星投票”小程序来进行投票。我们现在要以“艺空间手造坊”为主题进行一次投票活…

AcWing1015.摘花生

AcWing 1015. 摘花生Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它…

Java并发知识点

文章目录1. start()和run()方法的区别?2. volatile关键字的作用?使用volatile能够保证:防止指令重排3. sleep方法和wait方法有什么区别?sleep()方法4. 如何停止一个正在运行的线程?方法一:方法二&#xff1…

多重继承的虚函数表

同一个类,不同对象使用同一张虚函数表 不同类使用不同的虚函数表 子类自己添加的虚函数(非重写),在VS中是将此放在第一个继承类的虚函数表里. #include <iostream> using namespace std;class Father { public:virtual void func1() { cout << "Father::f…

<Linux>vscode搭建Linux远程开发工具

一、下载vscode&#x1f603;可以去vscode的官网下载&#xff0c;不过是外网下载速度较慢提速可以参考&#xff1a;(81条消息) 解决VsCode下载慢问题_vscode下载太慢_wang13679201813的博客-CSDN博客官网&#xff1a;Visual Studio Code - Code Editing. Redefined这里推荐的是…

【数据结构】二叉树的四种遍历

写在前面首先二叉树是一个大家族&#xff0c;这篇文章就讲一讲二叉树的遍历&#xff1a;递归遍历迭代遍历先识概念二叉树的存储结构&#xff0c;可以为顺序存储&#xff0c;即使用数组&#xff1b;也可以为链式存储&#xff0c;即使用链表。我们使用较多的就是链式存储结构&…

Ceres的自动求导实现原理剖析

目录数学原理实现原理总结首先注意数值求导和自动求导在使用的时候的不同之处。 实际上&#xff0c;正是自动求导这个地方使用了类模板&#xff0c;导致它不仅可以传入参数&#xff0c;还可以传入Jet类型的数据&#xff0c;从而实现了参数的雅可比矩阵的计算&#xff0c;完成自…

TPM密钥管理、使用

前面讲过证书相关内容&#xff0c;除了在软件方面有所应用外&#xff0c;在硬件方面也有很多应用。本次讲一下TPM相关的内容。 一、TPM介绍 1.1背景 TCG基于硬件安全的架构是为应对1990s后期日益增多的复杂恶意软件攻击应用而生的。当时以及现在&#xff0c;抵御PC客户端网络…

树状数组(高级数据结构)-蓝桥杯

一、简介树状数组 (Binary Indexed Tree,BIT)&#xff0c;利用数的二进制特征进行检索的一种树状结构。一种真正的高级数据结构&#xff1a; 二分思想、二叉树、位运算、前缀和。高效!代码极其简洁!二、基本应用数列a1,a2,....,an&#xff0c;操作&#xff1a;单点修改&#xf…

详解HashMap

目录 1.hash code 2.数据结构 3.初始化 4.存取 4.1.put 4.2.get 5.迭代 6.扩容 7.JDK1.7版本存在的问题 7.1.性能跌落 7.2.循环链表 8.散列运算 9.扰动函数 1.hash code hash code是使用hash函数运算得到的一个值&#xff0c;是对象的身份证号码&#xff0c;用于…