当前位置:首页 > 公众号精选 > 架构师社区
[导读]目录前言什么是远程调试?为什么要远程调试?什么是JPDA?如何开启远程调试?transportserversuspendaddressonthrowonuncaughtlaunchtimeout常用的命令IDEA如何开启远程调试?总结前言上周末一个朋友庆生,无意间听他说起了近况,...

目录

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

前言

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

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

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

什么是远程调试?

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

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

为什么要远程调试?

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

什么是JPDA?

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

惊呆了!Spring Boot 还能远程调试?
其中实现调试功能的主要协议是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

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

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

server

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

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

suspend

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

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

address

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

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

onthrow

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

onuncaught

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

launch

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

timeout

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

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

常用的命令

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

  1. Socket 方式监听 8000 端口,程序启动阻塞(suspend 的默认值为 y)直到被连接,命令如下:
-agentlib:jdwp=transport=dt_socket,server=y,address=8000
  1. Socket 方式监听 8000 端口,当程序启动后 5 秒无调试者连接的话终止,程序启动阻塞(suspend 的默认值为 y)直到被连接。
-agentlib:jdwp=transport=dt_socket,server=y,address=localhost:8000,timeout=5000
  1. 选择可用的共享内存连接地址并使用 stdout 打印,程序启动不阻塞。
-agentlib:jdwp=transport=dt_shmem,server=y,suspend=n
  1. socket 方式连接到 myhost:8000上的调试程序,在连接成功前启动阻塞。
-agentlib:jdwp=transport=dt_socket,address=myhost:8000
  1. 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

惊呆了!Spring Boot 还能远程调试?
然后填写服务器的地址及端口,点击 OK 即可。

惊呆了!Spring Boot 还能远程调试?
以上步骤配置完成后,点击DEBUG调试运行即可。

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

惊呆了!Spring Boot 还能远程调试?

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭