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


相关推荐
二月夜6 小时前
剖析Java正则表达式回溯问题
java·正则表达式
xuhaoyu_cpp_java6 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
程序员二叉7 小时前
【Java】集合面试全套精讲|HashMap/ArrayList高频考点完整版
java·面试·哈希算法
cfm_29147 小时前
JVM GC垃圾回收初步了解
java·开发语言·jvm
心之伊始7 小时前
LangChain4j RAG 实战:Java 后端如何把本地文档接入 Embedding 检索链路
java·架构·源码分析·csdn
许彰午8 小时前
17_synchronized关键字深度解析
java·开发语言
Xzh04239 小时前
AI Agent 学习路线(Java 后端方向)
java·人工智能·学习
zhangpba9 小时前
IntelliJ IDEA 集成通义灵码
ai·idea
艾利克斯冰10 小时前
Java 设计模式-行为型模式(更新中)
java·开发语言·设计模式
倒霉蛋小马10 小时前
Java新特性:record关键字
java·开发语言