使用IDEA远程Debug调试

news2024/11/19 17:51:42

在这里插入图片描述

文章目录

  • 背景
  • 配置
    • IDEA设置
    • 启动脚本改造
  • 细节
    • 细节1:停在本地断点,关闭程序后会继续执行吗?
    • 细节2:jar包代码和本地不一致会怎么样?
    • 细节3:日志打印在哪里?
    • 细节4:调试时其他人会不会卡住?
    • 细节5:本地代码修复bug远程调用的时候
    • 细节6:这个不算远程调试的问题,是dropframe的问题,放在这里一起讲了
      • 关于drop frame的问题,如果drop frame了重新进行调试,会不会插入2条记录?
    • 细节7:跟上面一样,是dropframe问题
  • 总结

背景

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

配置

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

IDEA设置

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

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

1.选择 Edit Configuration

在这里插入图片描述

在这里插入图片描述

注意:注意端口别被占用。后续这个端口是用来跟远程的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变得安全了,远程调试只允许本地,如果要远程,则需要在端口前配置*

启动脚本改造

使用第一步得到的 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 和 &

  4. 启动springboot,启动IDEA里的
    在这里插入图片描述

细节

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

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

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

在这里插入图片描述

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

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

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

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

比如你调试test1方法,test2方法在test1下面,在test2里加代码,这样并不影响test1中的行号,这种是可以在调试的时候准确反应行号的

细节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:调试时其他人会不会卡住?

远程调试的时候,打了断点,停住后会不会导致页面的请求卡住。

比如你使用远程调试,别的QA在测试这个页面,结果他们看到的结果是怎么样的?会卡住吗?会的,已经实际遇到过这种情况了。

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

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

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

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

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

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

在这里插入图片描述

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

关于什么是drop frame

在这里插入图片描述

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

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

总结

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

●难保证本地代码和远程一致,而且你也很难判断是否一致

●通过远程调试发现了bug,但是又不能立即修复后继续调试,只能修复后部署后继续远程调试
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1507528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别

文章目录 0. 前言1. 级联神经网络介绍2. MTCNN介绍2.1 MTCNN提出背景2.2 MTCNN结构 3. MTCNN PyTorch实战3.1 facenet_pytorch库中的MTCNN3.2 识别图像数据3.3 人脸识别3.4 关键点定位 0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解&#xff…

Android将自己写的maven库上传至jitpack(2024靠谱版)

浏览了一堆陈年旧贴,终于实验成功了 第一步 将自建空项目同步至github并保证能正常运行第二步新增一个library类型的modul第三步 在新建的library里面写一些测试用的代码第四步在library的gradle文件增加插件和发布脚本第五步新建一个配置文件第六步 把所有更改push…

3D模型+BI分析,打造全新的交互式3D可视化大屏开发方案

背景介绍 在数字经济建设和数字化转型的浪潮中,数据可视化大屏已成为各行各业的必备工具。然而,传统的数据大屏往往以图表和指标为主,无法真实地反映复杂的物理世界和数据关系。为了解决这个问题,3D模型可视化和数字孪生技术应运…

OSI(Open Systems Interconnection)模型和TCP/IP模型

OSI模型 OSI模型是一个概念模型,由国际标准化组织(ISO)在1984年提出,用于促进不同系统间的通信互联。OSI模型将网络通信的过程分为七层,每一层都有其特定的功能,从下至上依次是: 物理层&#x…

专题二 -滑动窗口 - leetcode 209. 长度最小的子数组 | 中等难度

leetcode 209. 长度最小的子数组 leetcode 209. 长度最小的子数组 | 中等难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 209. 长度最小的子数组 | 中等难度 1. 题目详情 给定一个含有 n 个正整数…

WIN11环境下Git配置SSH Key拉取Gitee仓库代码

Gitee官方配置参考网址: https://help.gitee.com/base/account/SSH%E5%85%AC%E9%92%A5%E8%AE%BE%E7%BD%AE。https://help.gitee.com/base/account/SSH%E5%85%AC%E9%92%A5%E8%AE%BE%E7%BD%AE。 A.生成 SSH 公钥 Windows 用户建议使用 Windows PowerShell 或者 Git…

C#,数值计算,用割线法(Secant Method)求方程根的算法与源代码

1 割线法 割线法用于求方程 f(x) 0 的根。它是从根的两个不同估计 x1 和 x2 开始的。这是一个迭代过程,包括对根的线性插值。如果两个中间值之间的差值小于收敛因子,则迭代停止。 亦称弦截法,又称线性插值法.一种迭代法.指用割线近似曲线求…

【linux】02 :Linux基础命令

1.掌握linux系统的目录结构 linux只有一个顶级目录,称之为:根目录。 windows系统有多个顶级目录,即各个盘符。 2.linux路径的描述方式 /在Linux中的表示:出现在开头表示根目录,出现在后面表示层级关系。 3.什么是命…

官网在线客服系统源码 完全开源可二开 带完整的安装代码包以及搭建教程

在互联网时代,用户对于线上服务的便捷性和高效性要求越来越高。官网在线客服系统作为企业与用户之间实时沟通的工具,不仅能够提高用户满意度,还能够有效促进业务转化。然而,市面上的在线客服系统大多价格昂贵且功能单一&#xff0…

提高Python代码效率:*args与**kwargs的高级应用指南

提高Python代码效率:*args与**kwargs的高级应用指南 引言*args的使用和技巧基本用法示例代码: 结合位置参数和*args使用示例代码: 使用*args传递参数给另一个函数示例代码: 解包列表或元组为函数参数示例代码: 高级技巧…

不同路径 不同路径 II 整数拆分

62.不同路径 力扣题目链接(opens new window) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。…

jupyter notebook 突然莫名奇妙的白屏

jupyter notebook 突然莫名奇妙的白屏 事件背景: 最近在折腾openai,哎,一言难尽,使用的是conda管理python版本的切换,使用jupyter notebook来运行python程序,其实PyCharm也行,但是,…

数据标注专业团队

数据标注服务 在跟一些淘宝、多多商家老板合作后,客户一般付款后,中介是有20%左右的提成,我们主要是希望可以实现数据标注无中介化,有需求可以直接联系数据标注团队直接负责人, 若有意愿请添加添加v:shu_ju…

萨科微所在的功率半导体行业在电子产业中占据重要地位,产品用于电力设备的电能转换和电路控制,是进行电能处理的核心器件

萨科微slkor(www.slkormicro.com)半导体宋仕强说,萨科微所在的功率半导体行业在电子产业中占据重要地位,产品用于电力设备的电能转换和电路控制,是进行电能处理的核心器件。功率半导体细分产品主要有MOSFET、IGBT、BJT…

恒驰上云规划实施解决方案上线华为云官网

华为云与伙伴共同打造联合解决方案 已成为更多企业的数字化转型利器 1月恒驰上云规划实施解决方案 完成上市宣讲并正式上架华为云官网 恒驰上云规划实施解决方案能力全景图:融合厂商云服务能力,一站式高效云迁移 从深入了解企业的本地IT环境、业务特点…

前端的数据标记协议

文章目录 数据标记协议是什么数据标记协议的作用常见的数据标记协议Open Graph protocol 开放图谱协议基本元数据协议可选元数据结构化属性 —— 元数据的属性多个相同的元数据标签类型元数据的使用方法全局类型使用自定义类型使用对象类型使用歌曲对象类型视频对象类型文章对象…

应急响应-Webshell-典型处置案例

网站后台登录页面被篡改 事件背景 在2018年11月29日4时47分,某网站管理员发现网站后台登录页面被篡改,“中招”服务器为windows系统,应采用java语言开发,所使用的中间件为Tomcat。 事件处置 Webshell排查 利用D盾对网站目录进…

【框架学习 | 第四篇】Spring下篇(Spring AOP、Spring 事务、Spring中7种设计模式)

文章目录 4.详讲AOP4.1什么是AOP?4.2为什么叫做面向切面编程?4.3AOP解决的问题4.4AOP应用场景4.5AOP实现方式4.5.1动态代理的实现(1)JDK代理(2)CGLB代理(3)基于接口的动态代理&#…

国产云数据库介绍

这是ren_dong的第35篇原创 前言 目前布局数据库的IT公司越来越多,主要基于 计算场景的延伸和拓展。在不同的计算场景下,所需要的数据库的性能会有所差异。 特别是在 云计算场景下,传统的数据库面临一定挑战。腾讯、阿里巴巴等纷纷开发更加适合…

管理类联考-复试-管理类知识-领导激励理论控制

文章目录 领导领导方式的基本类型领导权变理论情境领导理论管理权力四种员工类型 激励理论归因理论、晕轮效应、假设相似性古典动机理论马斯洛需求理论双因素理论XY理论三种需求理论工作特征模型当代动机理论目标设置理论强化理论公平理论期望理论 控制控制及其必要性PDCA、甘特…