使用IDEA远程debug调试

背景介绍

开发过程中,我们经常会遇到部署的代码运行出问题、看日志由不是很直观、我们希望可以像调试本地代码一样去调试远程代码;IDEA提供了Remote工具,基于JVM的跨平台能力,我们可以远程调试部署的代码。

IDEA的Debug的优缺点

优点: 把断点打在本地,直接访问线上程序即可,方便调试。(线上程序出了问题,无法根据log进行排查时)。
缺点: 可能会造成“阻塞”。(同一程序中,本地断点没走完之前,别的接口请求可能会“阻塞”)。

使用原理

使用 IntelliJ IDEA 进行远程调试的实际原理是通过 Java 远程调试协议(JDWP)来实现的。以下是远程调试的基本原理:
打开远程调试功能:在远程服务器的 Java 应用程序中,需要在启动参数中添加特定的选项来启用远程调试功能。通常是通过设置 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=: 来启用远程调试。
配置 IDEA 远程调试:在 IntelliJ IDEA 中,你需要创建一个远程调试配置,在该配置中指定要连接的远程服务器的地址和端口号等信息。
建立调试连接:当你在 IDEA 中启动远程调试配置时,IDEA 将尝试连接到远程服务器上指定的地址和端口号,然后与运行在远程服务器上的 Java 应用程序建立调试连接。
交互式调试:一旦连接建立成功,你就可以像在本地调试一样在 IDEA 中进行远程调试了。你可以设置断点、观察变量、单步执行等操作,同时在远程服务器上的应用程序也会相应地暂停和执行。
总的来说,使用 IDEA 进行远程调试的原理就是在远程服务器上启用远程调试功能,并通过 IDEA 建立调试连接,然后在本地进行交互式的调试操作。这样可以在不影响远程服务器上的运行情况的情况下,对远程服务器上的 Java 应用程序进行调试和故障排除。
客户端(idea 、eclipse 等)之所以可以进行调试,是由于客户端 和 服务端(程序端)进行了 socket 通信,通信过程如下:
1、先建立起了 socket 连接
2、将断点位置创建了断点事件通过 JDI 接口传给了 服务端(程序端)的 VM,VM 调用 suspend 将 VM 挂起 3、VM 挂起之后将客户端需要获取的 VM 信息返回给客户端,返回之后 VM resume 恢复其运行状态
4、客户端获取到 VM 返回的信息之后可以通过不同的方式展示给客户

前提

保证远程和本地跑的代码是一致的
保证远程和本地跑的代码是一致的

使用操作

脚本
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address={自己定义的端口号}
或者
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address={自己定义的端口号}

样例
原始脚本
java -Dloader.path=./lib/ -Dspring.config.location=./config/ -Dspring.profiles.active=dev -jar ./web-0.0.1.jar
结果
java -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=0.0.0.0:5006 -Dloader.path=./lib/ -Dspring.config.location=./config/ -Dspring.profiles.active=dev -jar ./web-0.0.1.jar

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

思静语

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

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

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

打赏作者

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

抵扣说明:

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

余额充值