背景

前段时间程序部署到生产环境后出现了一些不可预见的问题,只会输出日志再分析的我苦不堪言,偶然发现 idea 可以直接对程序进行远程调试,实在方便的很。

不过远程调试对网络的要求比较高,如果网络不是十分流畅,调试时的卡顿也会比较麻烦。

参考文章:https://www.cnblogs.com/krockey/p/5056945.html

启动脚本配置

想要让程序支持远程调试功能,只需要在启动时加上特定的 JVM 参数,根据 JDK 版本的不同,有如下几种脚本:

  • 大于 1.4.x
    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=4001
  • 等于 1.4.x
    -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4001
  • 小于 1.4.x
    -Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4001

最后的4001就是远程调试端口,可以任意修改。如果生产环境是云服务器,还要放行防火墙和安全组。

IDEA 配置

idea 配置非常简单,按下图步骤操作:

image.png

image.png

image.png

全部修改完成后,点击“OK”

开始远程调试

image.png

点击图中的 debug ,当 console 窗口中打印出 Connected to the target VM, address: 127.0.0.1:4001', transport: 'socket'代表连接成功,这时候在代码里加上断点,再对生产环境的程序发起请求,就会自动执行到断点处了。

需要注意,远程调试的是生产环境的代码,即便修改了本地代码,调试时也不会执行,所以要保证生产环境的代码与本地一致