IDEA远程调试Java代码

article/2025/10/11 8:52:21

文章目录

    • 1 前言
    • 2 远程 Debug 调试原理
      • 2.1 理论基础
      • 2.2 远程调试分类
    • 3 主动连接调试
      • 3.1 远程服务中开启 Debug 服务
        • 3.1.1 对于 SpringBoot
        • 3.1.2 对于 Tomcat
      • 3.2 IDEA 中指定 Debug 服务器
      • 3.3 远程服务器防火墙端口放行
    • 4 被动连接调试
      • 4.1 对于 Tomcat
      • 4.2 对于 SpringBoot
    • 5 开始调试
    • 6 关闭调试

1 前言

当我们的代码在线上/测试环境运行出现异常需要进行问题定位时,之前的传统做法是:查看异常日志,根据日志定位到出错代码,然后再根据相关参数及异常信息进行推断。但是很多异常问题需要更细致的进行debug才能够更精准的去定位和解决,这种情况下,我们希望能够像在本地调试一样去debug线上/测试环境的代码,这样可以大大提升bug修复的效率。IDEA 远程调试为我们提供了解决方案,像运行本地代码一样调试远程主机上的程序,以排查远程程序的BUG或代码执行流程。

2 远程 Debug 调试原理

在本地远程调试服务器端的代码原理:本地和服务器端建立一个socket连接监听,当客户端访问服务器的时候,服务器端会先去问本地idea有没有断点,如果有会停在当前断点,如果没有就返回给客户端。

2.1 理论基础

JPDA(Java Platform Debugger Architecture)是Java平台调试体系结构的缩写。由3个规范组成,分别是JVMTI(JVM Tool Interface),JDWP(Java Debug Wire Protocol),JDI(Java Debug Interface) 。

  • 1.JVMTI定义了虚拟机应该提供的调试服务,包括调试信息(Information譬如栈信息)、调试行为(Action譬如客户端设置一个断点)和通知(Notification譬如到达某个断点时通知客户端),该接口由虚拟机实现者提供实现,并结合在虚拟机中
  • 2.JDWP定义调试服务和调试器之间的通信,包括定义调试信息格式和调试请求机制
  • 3.JDI在语言的高层次上定义了调试者可以使用的调试接口以能方便地与远程的调试服务进行交互,Java语言实现,调试器实现者可直接使用该接口访问虚拟机调试服务。

2.2 远程调试分类

远程调试分为主动连接调试,和被动连接调试。

主动连接调试:服务端配置监控端口,本地IDE连接远程监听端口进行调试,一般调试问题用这种方式。

被动连接调试:本地IDE监听某端口,等待远程连接本地端口。一般用于远程服务启动不了,启动时连接到本地调试分析。

3 主动连接调试

3.1 远程服务中开启 Debug 服务

3.1.1 对于 SpringBoot

命令行添加选项,并重启,注意新参数必须在 -jar 之前

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -jar springbootfirst.jar  

3.1.2 对于 Tomcat

启动脚本中添加选项,并重启:

## sudo vim $CATALINA_HOME/bin/catalina.sh
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

3.2 IDEA 中指定 Debug 服务器

  • 点击主窗口菜单 Run / Edit Configurations,打开Run/Debug Configurations窗口;

  • 点击工具栏上的+按钮,下拉菜单中选择Remote

  • 设置 Host 为远程服务器的域名或IP,保持 Port=5005 无需调整;

  • Use module classpath配置为程序模块名称;

  • Command line arguments for remote JVM配置:配置Debug远程服务的命令行启动参数,

    形如 -Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005,参数说明如下:

    • -Xdebug:JVM在DEBUG模式下工作;
    • -Xrunjdwp:JVM使用(java debug wire protocol)来运行调试环境;
    • transport:监听Socket端口连接方式,常用的dt_socket表示使用socket连接;
    • server:=y表示当前是调试服务端,=n表示当前是调试客户端;
    • suspend:=n表示启动时不中断(如果启动时中断,一般用于调试启动不了的问题);
    • address:表示本地监听的地址和端口。

在这里插入图片描述

3.3 远程服务器防火墙端口放行

如果调试服务器与远程服务器网络不相通则需要开放端口

### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5005 -j ACCEPT
### 重启生效: sudo systemctl restart iptables

4 被动连接调试

首先需要IDEA配置监听,如主动连接调试的IDEA配置图片,Debugger mode选择:Listen to remote JVM,配置本地监听端口,比如默认5005。点击Debug开始等待远程连接调试。

4.1 对于 Tomcat

配置远程服务启动脚本:

JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:5005,suspend=y"

4.2 对于 SpringBoot

命令行添加选项,并重启,注意新参数必须在 -jar 之前

java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:5005,suspend=y -jar springbootfirst.jar

参数含义和主动连接调试一样,只是这里suspend=y表示启动时就中断,需要连接本地IDE调试启动。address=ip:port,ip需要修改为本地的对外IP。

这样远程项目启动时就连接到本地,方便调试项目启动不了的问题。

5 开始调试

  • 要求:双方代码一致,否则远程调试无法启动;
  • 本地启动刚刚配置的 Remote Server,正常时会看到日志: Connected to the target VM, address: 'xxx:5005', transport: 'socket'
  • 本地 IDEA 代码中设置断点
  • 浏览器或手机 HTTP 访问服务器
  • IDEA 即可在断点暂停并跟踪

6 关闭调试

服务器上多开放个端口是不安全的,调试完毕后可恢复防火墙设置。

Java 服务器关闭 Debug 服务器的功能,因为debug会影响性能。


http://chatgpt.dhexx.cn/article/ga1CQ3Xl.shtml

相关文章

IDEA如何开启远程调试

要进行远程调试,首先被调试的服务必须支持远程调试,先要开一个远程调试接口,在启动参数里面增加下面的语句: -agentlib:jdwptransportdt_socket,servery,suspendn,address6001 这主要是指定远程调试的端口,为6001。一…

IDEA 远程调试

IDEA 远程调试,像运行本地代码一样调试远程主机上的程序,以排查远程程序的BUG或代码执行流程。 作者:王克锋 出处:https://kefeng.wang/2018/03/06/idea-remote-debug/ 版权:自由转载-非商用-非衍生-保持署名&#…

IDEA 远程断点调试

IDEA 远程断点调试 有时候,有些bug无法在本地环境复现,此时就需要我们去线上的机器远程debug,可以采用idea Remove JVM Debug模式. 首先,点击Edit Configurations 然后点击左上角的Add New Configuration,选择Remove…

idea实现远程调试

1.项目开启远程调试 在-jar 后面配置 -agentlib:jdwptransportdt_socket,servery,suspendn,address8327 (8327是远程调试的端口号,注意不要和项目端口号冲突) nohup java -jar -agentlib:jdwptransportdt_socket,servery,suspendn,address8…

IDEA进行远程调试

前言 对于分布式系统的调试不知道大家有什么好的方法。对于我来说,在知道远程调试这个方法之前就是在代码中打各种log,然后重新部署,上线,调试,这样比较费时,有什么更好的办法呢? 有时候&…

idea 远程debug调试

1,远程DEBUG的必要性 由于部署环境的差异性,相信很多朋友都碰到过开发环境正常测试过的功能在测试环境甚至生产环境下出现bug的情况。一般情况下,生产环境可以采取的手段比较单一,即通过日志的方式获取运行中的环境上下文&…

使用IDEA远程debug调试(一篇懂所有)

使用IDEA远程调试(一篇懂所有) 背景 有时候我们需要进行远程的debug,本文研究如何进行远程debug,以及使用 IDEA 远程debug的过程中的细节。看完可以解决你的一些疑惑。 配置 远程debug的服务,以springboot微服务为例(springcloud的应该差…

SpringBoot 远程DEBUG调试

我们在测试代码的时候,我们本地代码展示的效果可能和测试环境不一样,明明代码一样,但是效果不一样,代码已经部署到服务器端,因此远程连接服务器端远程调试很重要,实际开发较为常用. 一,调试命令 最为常见的远程调试命令 java -jar -Dserver.port8092 -Dspring.pr…

idea远程调试

一 业务:服务器与本地环境不一样 二 需求:如果服务器报错,使用本地idea进行远程debug调试 三 解决方案:本地idea远程debug调试 四 具体操作 1 第一步:IDEA打开远程启动的springboot应用程序所对应的本地springboot…

IDEA 开启远程调试

idea 远程调试 背景 在编写代码时, 总会遇到这样或者那样的bug. 有些bug 特别是业务逻辑的bug . 在生产或测试环境好复现而在开发环境很难复现. 现在提供的一种思路, 就是远程调试: 我们可以在本地直接调试生产环境或者测试环境的代码. 只需我们本地代码和远程部署的代码一致.…

Idea远程debug

Idea远程调试 当把一个本地项目部署到远程服务器后有可能出现意想不到错误,这个时候通过远程调试能够更清楚的找到bug所在位置。本篇主要讲解如何使用Idea开发工具 进行调试1.远程调试服务器上面的SpringBoot 项目2.远程调试服务器上运行在tomcat中的项目&#xff0…

Intellij IDEA远程debug教程实战和要点总结

远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用。 JAVA 支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过接口的协…

计算机网络——网络工程项目

一、项目要求 1. 假设某单位(学校、企业均可)在不同地理位置具有两个内部网络。这两个内部网络规模不同(分别简称主网、次网)。主网至少覆盖4座楼,每座楼至少4层,每层至少10个房间,次网规模不限…

计算机系统要素-从零开始构建现代计算机 项目代码

《计算机系统要素-从零开始构建现代计算机》是一本好书,这阵子花业余时间学习,并跟着做了章节后面的项目,收获很大。已经完成了前面9章的项目内容,目前正在进行第10章,编译器的编写。 前面9章的项目,以Nand…

2022 年面向初学者的15 个计算机视觉项目创意案例

计算机视觉是人工智能领域最热门的话题之一。 但试图找出学习和掌握该领域的最佳方法很容易混淆。 我们的建议? 不要陷入分析理论概念的困境。 相反,将您的概念知识与实践经验相结合,开始构建您自己的计算机视觉模型! 在本文…

Java项目实战:计算机毕业设计案例分享(Java毕设)

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、…

计算机在段前加项目符号,word中给段落添加项目符号的方法

在不同的杂志和报纸上有时我们会看到下图这样的效果,那么它是如何设置出来的呢,这个我们称为是项目符号,只在每个段落的开始处显示,那么下面小编就教你怎么在word中给段落添加项目符号。 word中给段落添加项目符号的方法 1.加基本…

用计算机视觉可以做什么项目,程序员必看:13个GitHub开源又炫酷的计算机视觉项目...

在这篇文章中,我们列出了一些令人敬畏的计算机视觉GitHub库,希望这些库能激励所有的AI开发者们像这样去构建自己的项目。 计算机视觉GitHub知识库 1、使用CNN进行三维人脸重建(★–4.1k) 这个GitHub存储库有一个项目,其中卷积神经网络用于使用2D图像重建3D人脸模型。这是一个…

计算机视觉项目-文档扫描OCR识别

😊😊😊欢迎来到本博客😊😊😊 本次博客内容将继续讲解关于OpenCV的相关知识 🎉作者简介:⭐️⭐️⭐️目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉pytho…

计算机视觉项目-人脸识别与检测

😊😊😊欢迎来到本博客😊😊😊 本次博客内容将继续讲解关于OpenCV的相关知识 🎉作者简介:⭐️⭐️⭐️目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉深度学…