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


相关推荐
GSDjisidi10 分钟前
日本IT-SIER/SES的区别详情、契约形态等
java·大数据·c语言·c++·php
小悟空GK10 分钟前
Tomcat
java·tomcat
静心观复30 分钟前
futures.toArray(new CompletableFuture[0])
java
java66666888840 分钟前
如何在Spring Boot中实现实时通知
java·spring boot·后端
万界星空科技1 小时前
介绍一款Java开发的商业开源MES系统
java·开发语言·经验分享·科技·5g·开源·制造
振华首席娱记1 小时前
代码随想录——划分字母区间(Leetcode763)
java·数据结构·算法·leetcode·职场和发展
飞翔的佩奇1 小时前
Java项目:基于SSM框架实现的游戏攻略网站系统分前后台【ssm+B/S架构+源码+数据库+毕业论文+任务书】
java·数据库·spring·游戏·架构·maven·ssm框架
u0104058361 小时前
构建可扩展的Java Web应用架构
java·前端·架构
长亭外的少年1 小时前
ClickHouse 介绍:深度解析高性能列式数据库的核心优势
java·数据库·clickhouse
tokengo2 小时前
从Java开发者到.NET Core初级工程师学习路线:C#语言基础
java·csharp·新人入门