debug技巧之远程调试

一、前言

大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦。

当我们的应用发布到线上之后,就不能随意启停了,但如果线上出现了BUG怎么办呢?大多数时候我们会借助线上打印的日志进行排查问题,如果幸运的话很快就可以定位到问题,但不幸的话就麻烦了。首先出错的地方可能根本没有打印日志或者日志打印不全,其次有可能本地是好好的但线上就是不行,总之倒霉的时候喝凉水都塞牙。。。

每当碰到这个情况我就在想,要是我能像本地调试一样调试线上的代码就好了,保证很快就可以排查出问题。之前经验少,以为我这个想法不可能实现,后来才发现只有我想不到,没有别人做不到的,这种远程调试的方式真的有,而且实现起来还挺简单。

接下来我就给大家介绍一下IntelliJ IDEA 自带的Remote JVM Debug帮助我们实现远程调试。

IntelliJ IDEA 提供了一个非常有用的功能,即远程调试(Remote JVM Debug)。这个功能允许开发者在不重启应用的情况下,连接到一个正在运行的 Java 应用程序,并进行调试。

二、Remote JVM Debug

1. 配置远程调试端口

首先,你需要在运行的 Java 应用程序中启用远程调试功能。这通常是通过在启动应用程序时添加 JVM 参数来实现的:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 -jar demo.jar 

这里以 5005 端口为例,suspend=n 表示 JVM 启动时不会暂停,直到调试器连接上。例如这样:

注意:-agentlib-jar顺序不要搞反了,否则无法启动监听。

2. 启动 IntelliJ IDEA 的远程调试

(1)找到Edit Configurations…

###(2)点击左上角的 “+” 号,选择 “Remote JVM Debug”

###(3)输入远程调试的配置

  • 在 “Name” 字段中输入配置名称。
  • 在 “Host” 字段中输入运行 Java 应用程序的主机地址(如果是本机,可以使用 localhost)。
  • 在 “Port” 字段中输入你之前设置的远程调试端口(例如:5005)。

###(4)启动远程调试
当你的 Java 应用程序运行并且已经启用了远程调试功能后,IntelliJ IDEA 应该能够检测到它。如果一切正常,IDEA 将显示一个对话框,提示一个远程 JVM 正在尝试连接,就像下图所示。

进到这个界面,说明你成功进入了远程调试,现在你可以在代码中设置断点,就像在本地调试一样。当程序执行到断点处时,它将暂停,允许你检查变量、调用栈和程序状态。

(5)不要让断点卡主整个进程

由于远程调试执行到断点处,整个项目都会被卡住,这个时候就需要对该断点设置一下。

3. 注意事项

  • 确保防火墙设置允许调试端口的通信。
  • 如果你的应用程序已经在运行,并且没有启用远程调试,你可能需要重启它。
  • 在调试过程中,保持网络连接稳定,以避免调试会话中断。
  • 这个远程调试相当于开了个后门,调试结束之后要记得及时关闭。

三、小结一下

Remote JVM Debug给我们排查线上BUG提供了一份新的方案,什么情况下用,什么时候使用这个看个人。对于我来说,排查线上BUG首先还是看日志,其实是利用arthes,最后实在搞不定才会使用Remote JVM Debug,我是不太建议经常使用远程调试,建议线下测试,防止造成生产数据破坏或泄漏。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sum墨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值