使用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


相关推荐
阿捞23 分钟前
JVM排查工具单
java·jvm·python
mfxcyh12 分钟前
基于xml、注解、JavaConfig实现spring的ioc
xml·java·spring
Flittly14 分钟前
【SpringAIAlibaba新手村系列】(13)Tool Calling 函数工具调用技术
java·spring boot·spring·ai
xdscode21 分钟前
Spring 依赖注入方式全景解析
java·后端·spring
爱吃烤鸡翅的酸菜鱼31 分钟前
Java 事件发布-订阅机制全解析:从原生实现到主流中间件
java·中间件·wpf·事件·发布订阅
无限码力41 分钟前
华为OD技术面真题 - JAVA开发- spring框架 - 7
java·开发语言·华为od·华为od面试真题·华为odjava八股文·华为odjava开发题目·华为odjava开发高频题目
Lyyaoo.1 小时前
【JAVA基础面经】JAVA中的异常
java·开发语言
一定要AK1 小时前
JVM 全体系深度解析笔记
java·jvm·笔记
coder阿龙1 小时前
基于SpringAI+Qdrant+Ollama本地模型和向量数据库开发问答和RAG检索
java·数据库·spring boot·ai·数据库开发
Gofarlic_OMS1 小时前
HyperWorks用户仿真行为分析与许可证资源分点配置
java·大数据·运维·服务器·人工智能