测试环境的问题,Remote JVM Debug 帮我甩锅

作为一名自信的程序员,经常会遇到本地跑测试没有任何问题,可是一上测试环境就出BUG的情况,这个时候脑袋里冒出的第一个想法就是 “我的代码没问题,一定是环境问题”,那接下来第一件事,我们就是要自证清白。
比较常见也是比较容易想到的办法就是加log,每个方法的开始结束,每个判断的前后加log,打印出此时此刻的参数,然后编译、打包、部署、跑一遍流程、拿出日志、分析一遍,有可能就找到BUG了,但是有一种情况,这种方法没法发现问题,比如说在团队开发的情况下,某一处的代码被覆盖了,日志是正常打印了,但是代码执行的逻辑不一样。
我在团队里比较推荐使用 IntelliJ IDEA + JAVA远程调试(Remote Debugging)

接下来我介绍下这种方法

应用配置

应用启动需要添加 JVM参数
JAVA 5.0以后版本使用

-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n

JAVA 5.0 以前版本使用

-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend =n

参数说明

  • transport=dt_socket 表示应用端与调试发起端使用socket通信协议
  • address=5005 表示调试的通讯端口(一个未被使用的端口,当suspend=y时可配置调试者IP:端口)
  • server=y 表示这个 JVM 即将被调试
  • suspend=n 表示应用不需要等待调试者加入可以立即启动,如果是y,则应用会等待5005端口被调试者访问才会完全启动(可根据调试需要自由变换)

IDEA配置

Run -> Edit Configurations -> Add New Configuration -> Remote JVM Debug
在这里插入图片描述
在这里插入图片描述
参数说明

  • Debugger Mode
    Attach to remote JVM 服务端启动一个端口供客户端去连接调试
    Listen to remote JVM 服务端启动一个端口并监听等待客户端接入(服务端 suspend 设置y时候适用)

  • Host - 服务端IP

  • Port - 服务端address设置的端口

  • Command line arguments for remote JVM - 给出在不同Debugger Mode下建议的JVM启动参数

  • Use Module classpath - 需要调试的具体项目模块,不是必选

以上,就完成了所有配置,这时候就可以在本地打断点调试服务器上的应用了,选择新的配置启动即可

Tips

  1. 远程调试建议使用 线程断点+ 条件 的形式,因为测试环境毕竟是公用的,这样可以避其他请求被阻塞,我之前就因为使用普通断点导致存活校验被阻塞,服务反复重启。
  2. 调试过程中如果发现断点执行的代码没有在预期的行数,那就是服务器上代码和本地的不一致导致的
  3. 本地修改代码是不会同步修改服务器代码的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值