前言

  • 在部署线上项目时,相信大家都会遇到一个问题,线上的 Bug 但是在本地不会复现,多么无奈。
  • 此时最常用的就是取到前端传递的数据用接口测试工具测试,比如 POSTMAN,复杂不,难受不?
  • 今天陈某教你一招,让你轻松调试线上的 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 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9091 -jar xxx.jar

参数说明

  • 基于前面的调试命令,我们来分析一下基本的参数代表什么意思。

transport

  • 指定运行的被调试应用和调试者之间的通信协议,它由几个可选值:
  1. dt_socket:主要的方式,采用socket方式连接。
  2. dt_shmem:采用共享内存方式连接,仅支持 Windows 平台。

server

  • 指定当前应用作为调试服务端还是客户端,默认为n
  • 如果你想将当前应用作为被调试应用,设置该值为y,如果你想将当前应用作为客户端,作为调试的发起者,设置该值为n

suspend

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

address

  • 暴露的调试连接端口,默认值为8000
  • 此端口一定不能与项目端口重复,且必须是服务器开放的端口。

onthrow

  • 当程序抛出设定异常时,中断调试。

onuncaught

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

launch

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

timeout

  • 该参数限定为java -agentlib:jdwp=…可用,单位为毫秒ms
  • suspend = y时,该值表示等待连接的超时;当suspend = n时,该值表示连接后的使用超时。

参考命令

  1. -agentlib:jdwp=transport=dt_socket,server=y,address=8000:以 Socket 方式监听 8000 端口,程序启动阻塞(suspend 的默认值为 y)直到被连接。

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

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

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

  5. -agentlib:jdwp=transport=dt_socket,server=y,address=8000,onthrow=java.io.IOException,launch=/usr/local/bin/debugstub:以 Socket 方式监听 8000 端口,程序启动阻塞(suspend 的默认值为 y)直到被连接。当抛出 IOException 时中断调试,转而执行usr/local/bin/debugstub程序。

IDEA 远程调试示例

  • 首先打包 SpringBoot 项目,在服务器上运行,执行以下命令:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9190 -jar debug-demo.jar
  • 出现下图的界面,表示运行成功:

  • 然后在 IDEA 中,点击Edit Configurations,在弹框中点击+号,然后选择Remote

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

  • 配置完毕后,DEBUG 调试运行即可。

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

点我必发大财

springboot设置默认值_线上Bug无法复现?老司机教你一招,SpringBoot远程调试不用愁!...相关推荐

  1. java计算机毕业设计-线上自助旅游报名网-源程序+mysql+系统+lw文档+远程调试

    java计算机毕业设计-线上自助旅游报名网-源程序+mysql+系统+lw文档+远程调试 java计算机毕业设计-线上自助旅游报名网-源程序+mysql+系统+lw文档+远程调试 本源码技术栈: 项目 ...

  2. 表单设置默认值_你还不知道表单怎么设计吗?看这里!

    表单是电子商务.社交互动和大多数基于生产力应用类型的网站的关键.尽可能简单,微小的变化都有可能极大的提高用户体验. 一.设计原则 尽量减少痛苦 填写过程尽量简洁.容易. 说明填写完成路径 清晰的告诉人 ...

  3. 线上Bug无法复现怎么办?老司机教你一招,SpringBoot远程调试不用愁!

    前言 在部署线上项目时,相信大家都会遇到一个问题,线上的 Bug 但是在本地不会复现,多么无奈. 此时最常用的就是取到前端传递的数据用接口测试工具测试,比如 POSTMAN,复杂不,难受不? 今天陈某 ...

  4. sqlyog怎么设置默认值_详细讲解如何用SQLyog来分析MySQL数据库

    匿名用户 1级 2013-10-11 回答 SOLyog的下载.安装以及使用很简单.我去了相关网站下载,它只有384K字节大小.它把两个文件(一个可执行文件.exe和一个动态链接库文件.dll)安装到 ...

  5. html下拉框设置默认值_如何设置HTML select下拉框的默认值?

    HTML中的select标签用于创建可选择选项的下拉列表:option标签包含选定时将使用的值.那么如何来设置select下拉框里的默认值?下面本篇文章就来给大家介绍一下,希望对大家有所帮助. 我们可 ...

  6. mysql 设置默认值_为什么 Flink 无法实时写入 MySQL?

    作者:孙金城 摘要:本文为 Flink 生产环境应用中的疑问剖析,Flink 无法实时写入 MySQL 是初学者常见问题之一,由社区同学罗鹏程提出,Apache Flink PMC 孙金城(金竹)老师 ...

  7. sybase 设置默认值_[转]SYBASE 数据库操作笔记

    SYBASE 数据库操作笔记(转自MaYong) 数据库表名.列名(执行严格的大小写) 数据库表名.列名识别大小写区分(即表名是大写 查询时小写就错误) 大小写敏感的问题是因为字符集影响的,改为UTF ...

  8. springboot怎么杀进程_线上服务平均响应时间太长,怎么排查?

    线上服务平均响应时间太长,怎么排查? https://xie.infoq.cn/article/914b5c56000a3880016abd8d6 前言: 最近线上环境某个接口服务响应时间偏长,导致用 ...

  9. springboot设置默认值_spring boot jpa存储数据的默认值为java的默认值

    问题描述 使用jpa的save方法保存数据后返回的实体类为java数据类型的默认值 问题出现的环境背景及自己尝试过哪些方法 环境背景: 用户新增功能,调用新增接口后根据返回对象的id去查询等级表的等级 ...

最新文章

  1. 安全管家安卓_pc-cillin和腾讯电脑管家比较哪个更好
  2. VTK修炼之道40:频域处理_快速傅里叶变换及其反变换1
  3. boost::stl_interfaces模块实现节点迭代器的测试程序
  4. P5135-painting【组合数学】
  5. 丁磊:网易在元宇宙技术和规划上已经做好准备
  6. 看不出svp补帧_SVP4免费版|SVP4(视频补帧软件)下载v4.2.0.122免费版 附教程 - 欧普软件下载...
  7. 华为悦盒6108V9-V9U-V9_PUB-6108V9C-非高安版-通刷精简固件及教程
  8. 开课吧mysql课件百度云_开课吧第四期Web全栈课程分享
  9. 华为ensp模拟器 给路由器配置DHCP
  10. CSS一个摇摆的大红灯笼
  11. 第四讲:1.定时、延时任务控制小台灯打开/关闭
  12. 在线html页面设计工具,10款非常实用的在线网站原型设计工具
  13. Say Hello to Integers(10分)
  14. MySQL亿级数据分页的奇妙经历
  15. 全球十大知名工控机品牌排行榜
  16. 一看就懂!renren-fast 快速开发框架使用以及开发文档
  17. 2012年最值得关注的10家云计算公司
  18. Java实现适配器模式
  19. 报表开发工具FastReport.NET的十大常见问题及解决方法
  20. swot分析法案例_牙科知道三个不,掌握“SWOT分析法”,助力门诊运营

热门文章

  1. 网络存储 linux 访问,Linux基础教程学习笔记28——使用Samba访问网络存储
  2. dtft变换的性质_[2018年最新整理]DTFT变换.ppt
  3. cookie里面用到的关键字_晓龙吊打面试官系列:synchronized关键字入门(同步方法与同步代码块)...
  4. unix 登录mysql_实例分析mysql用户登录。
  5. linux中循环删除脚本,shell脚本:遍历删除
  6. 清理垃圾代码bat_来买个小内存u盘么咯?盘内带电脑垃圾清理.bat那种丨heibai.org...
  7. python datetime.datetime 当前_关于datetime:如何让python显示当前时间(东部)
  8. java爬虫post 404_POST 后台404错误
  9. 小青蛙oracle跟踪,Oracle 存储过程:游标
  10. mysql sql组合_详解mysql 组合查询