写点什么

不要再本地启动项目调试了,试 SpringBoot 远程调试你会发现新大陆!

  • 2021 年 11 月 11 日
  • 本文字数:1344 字

    阅读完需:约 4 分钟

如何开启调试?


===========


由于现在使用的大多数都是 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 时,该值表示连接后的使用超时。


常用的命令


=========


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


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


  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。



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

评论

发布
暂无评论
不要再本地启动项目调试了,试SpringBoot远程调试你会发现新大陆!