当前位置:   article > 正文

屌炸天的IDEA远程调试神器:Remote JVM Debug

remote jvm debug

IDEA的Remote JVM Debug功能可以用来在IDEA中调试远程服务器中的代码。其原理是在两个JVM间通过debug进行socket通信,以达到远程调试的目的。

为什么需要远程调试

你有时候会不会遇到一下几个问题:
我本地明明运行的好好的,部署到远程服务器上就出问题了。
本地很难重现,线上的环境在本地很难搭建准备。

要是我能远程直接调试该多爽,好吧,让你爽的神器来了。
8年前,写过一篇《如何用Eclipse对生产环境的JAVA应用进行远程调试》
,目前我们已经把开发环境迁移到了IntelliJ IDEA,所以也得同步补上这一课。

准备工作

服务端

启动脚本中添加

-agentlib:jdwp=transport=dt_socket,address=*:6688,server=y,suspend=n
  • 1

完整的启动脚本如下:

echo Starting the system server
java -server  -agentlib:jdwp=transport=dt_socket,address=*:6688,server=y,suspend=n -Dfile.encoding=UTF-8 -Dspring.profiles.active=local -Xms4096M -Xmx4096M  -XX:+UseG1GC -XX:+FreeHeapPhysicalMemory -XX:-OmitStackTraceInFastThrow  -Xlog:gc*:log/gc_$(date +"%Y%m%d%H%M").log:time,level,tags:filecount=50,filesize=100M -XX:+HeapDumpOnOutOfMemoryError  -jar  $PWD/game.jar &
  • 1
  • 2

参数说明

transport: 指定运行的被调试应用和调试者之间的通信协议,它由几个可选值: dt_socket:主要的方式,采用socket方式连接。 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里特别要注意的是,address不能只填个端口,这样的话,只能本机访问,必须填成*:6666 这个形式

客户端

在IDEA中点击Run/Debug Configurations,然后点击"+"号添加一个Remote JVM Debug,并填写远程服务器的IP地址和端口号,其中的参数为IDEA默认添加进去的,不用修改。通过debug模式运行此Remote Debug就能连接到远程服务器,在本地代码中打上断点,就能拦截请求至本地,进行debug调试。
在这里插入图片描述
点击debug,控制台会显示:

Connected to the target VM, address: '***.***.**.***:****', transport: 'socket'
  • 1

表示已经连上,就可以远程断点调试啦,就像本地调试一样的感觉。
停止运行的话,就会显示

Disconnected from the target VM, address: '***.***.**.***:****', transport: 'socket'
  • 1

注意点

需要注意的是,远程调试前需拉取最新代码,保证服务器与本地代码同步;远程调试只能同时满足一个人连接,也就是说在远程服务器debug的时候,别人就没法正常使用该环境。这个功能虽好,但别在正式环境,做断点调试哦,会阻碍正常的业务,甚至宕机的,切记!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/613287
推荐阅读
相关标签
  

闽ICP备14008679号