SpringBoot之DEBUG远程调试黑科技?

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

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

为什么要远程调试?

随着项目的体量越来越大,启动的时间的也是随之增长,甚至远程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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CV大魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值