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

article/2025/10/11 11:31:04

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

背景

有时候我们需要进行远程的debug,本文研究如何进行远程debug,以及使用 IDEA 远程debug的过程中的细节。看完可以解决你的一些疑惑。

配置

远程debug的服务,以springboot微服务为例(springcloud的应该差不多,我没研究过)。
首先,启动springboot需要加上特定的参数。

1、IDEA设置

高低版本的 IDEA 的设置可能界面有点不一样,我用2020.1.1的。大致上差不多,自行摸索。

IDEA打开远程启动的springboot应用程序所对应的

  1. 选择 Edit Configuration

在这里插入图片描述

  1. 如图,点击加号,选择Remote

在这里插入图片描述

  1. 配置,详细步骤见图

    在这里插入图片描述

    注意:注意端口别被占用。后续这个端口是用来跟远程的java进程通信的。

    可以注意到:切换不同的jdk版本,生成的脚本不一样

    • 选择 jdk1.4,则为

      -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=50055

      这就是你为什么搜其他博客,会有这种配置的原因,其实这个配置也是可行的。但更准确应该按照下面jdk5-8的配置

    • 选择 jdk 5-8,则为

      -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50055

    • 选择 jdk9以上,则为

      -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:50055

      据说因为jdk9变得安全了,远程调试只允许本地,如果要远程,则需要在端口前配置*

2、启动脚本改造

使用第一步得到的 Command line arguments for remote JVM 即可,即-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50055

  • 改造后的启动脚本如下
nohup java \
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50055 \
-jar remote-debug-0.0.1-SNAPSHOT.jar &

注意在windows中用 ^ 来进行换行,例如
java ^
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50055 ^
-jar remote-debug-0.0.1-SNAPSHOT.jar

说明:

1、端口可随意自己定,未被占用的都行,但是要和IDEA里的remote中设置的端口一致!其他参数照抄。详细的参数解释可以参照附录或自己搜

2、remote-debug-0.0.1-SNAPSHOT.jar 改成给你自己的 jar 包名字

3、我给的脚本是后台运行的,如不需要后台运行,自行去掉 nohup 和 &

3、启动springboot,启动IDEA里的

在这里插入图片描述

IDEA 远程调试的细节

1、细节1:停在本地断点,关闭程序后会继续执行吗

如果远程调试在自己的断点处停下来了,此时关闭IDEA中的项目停止运行,则还会继续运行执行完剩下的逻辑吗?
会的,这点比较不容易记住

以下面的代码为例,在第一行停住了。然后IDEA中停掉,发现停掉之后控制台还是打印了剩下的日志。

在这里插入图片描述

2、细节2:jar包代码和本地不一致会怎么样?

IDEA 里的代码如果不和jar包的一致,会怎么样。

结论:要保证和远程启动的代码一致

否则你debug的时候的行数会对不上。报错抛异常倒是不会。像这种还是能对得上行数的

  • 比如你调试test1方法,test2方法在test1下面,在test2里加代码,这样并不影响test1中的行号,这种是可以在调试的时候准确反应行号的
3、细节3:日志打印在哪里?

日志不会打印在IDEA的控制台上。即System.out 以及 log.info 还是打印在远程的。

@GetMapping("/test1")
public String test1() {System.out.println("第一行");System.out.println("第二行");log.info("log 第一行");log.info("log 第二行");return "ok";
}
4、细节4:调试时其他人会不会卡住?

远程调试的时候,打了断点,停住后会不会导致页面的请求卡住。
比如你使用远程调试,别的QA在测试这个页面,结果他们看到的结果是怎么样的? 会卡住吗?会的,已经实际遇到过这种情况了

5、细节5:本地代码修复bug远程调用的时候

如果在远程调试过程自己发现了bug,本地改好后重新启动IDEA里的项目,再到页面调用一次,能修复吗? 不能,运行的还是远程部署的jar中的代码

这个直接击碎了远程页面点一点触发本地代码进行debug的梦想。如果可以的话那调试代码就方便太多。

6、细节6:这个不算远程调试的问题,是dropframe的问题,放在这里一起讲了

关于drop frame的问题,如果drop frame了重新进行调试,会不会插入2条记录?

如图 userMapper.insert(eo) ,本方法没有使用 @Transactional 修饰,mapper方法执行过后事务会被立即提交,则库表里多了一行记录,如果drop frame后,再次进行调试,再次执行这代码,于是又插入了一条记录。

在这里插入图片描述

如果加上 @Transational 就不会有两条记录了,dropframe的时候事务没被提交,再次执行该插入代码也不会插入2条。

关于什么是drop frame

在这里插入图片描述

7、细节7:跟上面一样,是dropframe问题

如果把上述插入数据库的逻辑,换成调用远程的接口,在dropframe后,再次执行相同的代码,会不会导致远程接口被执行了2次?会的

总结

好像感觉远程调试的用处也不是那么大,不能作为长期使用的调试工具。只能作为临时调试的手段。

难点有几个:
1、难保证本地代码和远程一致,而且你也很难判断是否一致
2、通过远程调试发现了bug,但是又不能立即修复后继续调试,只能修复后部署后继续远程调试

附录

参考资料:
https://chenxq.xyz/post/java-remote-debug/


http://chatgpt.dhexx.cn/article/0vtQ7I3V.shtml

相关文章

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的相关知识 🎉作者简介:⭐️⭐️⭐️目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉深度学…

计算机专业学生如何做项目,计算机专业学生如何申请科研项目?

下面从三个方面来进行解答: 1、比起去哪做,更看重做了什么 作为面试官,最近收到很多本科生的简历,都是写满了各种经历。虽然每个项目都只有2-3个月,感觉CV, speech, NLP啥都做了一遍。 遇到这种情况我一般反而会特别关注你具体的角色,你要对每个你写上简历的项目和经历负…

大创项目计算机科学与技术,计算机系4个项目入选2020大创第二批

原标题:计算机系4个项目入选2020大创第二批 2020大创第二批立项结果 清华大学 “大学生创新创业训练计划”(简称 “大创”)项目是一项强化创新创业能力训练,增强高校学生的创新能力和在创新基础上的创业能力,培养适应创新型国家建设需要的高水平创新人才的计划。 计算机系一…

计算机毕业设计项目大全

文章目录 0 前言1 java web 管理系统 毕设选题2 java web 平台/业务系统 毕设选题3 游戏设计、动画设计类 毕设选题 (适合数媒的同学)4 算法开发5 数据挖掘 毕设选题6 大数据处理、云计算、区块链 毕设选题7 网络安全 毕设选题8 通信类/网络工程 毕设选题9 嵌入式 毕设选题10 开…

计算机专业如何自己增加项目经验?

来源知乎精选话题,已获得作者授权,详情见阅读全文 现状: 最近在找软件开发的实习工作,分别参加了华为,CVTE等面试,在面试过程中,没有项目经验,立马就被面试官表示 没有任何说服力 的…

计算机相关项目

基于PythonWeb志愿填报推荐系统 基于文本挖掘的新闻推荐系统 基于nlp(自然语言处理)的商品评价情感分析系统 基于Python的《三国演义》文本可视化(人物等) 基于Python爬虫的图书系统及可视化实现 空气质量数据可视化与分析系…

112个计算机毕业设计项目,适用于所有JAVA计算机专业毕业生,不走弯路

对于即将开始毕业设计的计算机专业学生,选题和完成项目的压力可能让你感到困扰。今天,我们将为大四的学生分享一些毕业设计项目,希望能为你的毕业设计提供一些灵感。 一、成品列表 以下所有springboot框架项目的源码博主已经打包好上传到百d…

40套计算机毕业设计项目合集【含源码+论文】

前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的java web缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的java web管理系统达不到老师的要求。 为了大家能够顺利以及最少的精…