多人同时远程Debug冲突解决方案

简介: # 背景 先讲一个开发人员经常会遇见的现象~ A和B两个developer共同负责同一个项目P的开发,P在dev环境上只部署了一台机器。有一天,A需要远程调试P的接口1,于是他使用本地idea启动remote连接到了P,debug的不亦乐乎。而此时B正在调用这台机器的接口2,B突然发现刚才还好好的,突然就不能访问了(B一脸懵逼样)…… 听完了故事,下面我们进入主题~ 开发人员经常会

背景

先讲一个开发人员经常会遇见的现象~
A和B两个developer共同负责同一个项目P的开发,P在dev环境上只部署了一台机器。有一天,A需要远程调试P的接口1,于是他使用本地idea启动remote连接到了P,debug的不亦乐乎。而此时B正在调用这台机器的接口2,B突然发现刚才还好好的,突然就不能访问了(B一脸懵逼样)……

听完了故事,下面我们进入主题~

开发人员经常会使用到本地debug功能,有时候有场景需要远程debug日常环境的机器,在这种情况下可能会有多个人同时在使用这台机器,经常出现的现象是某一个人在远程debug这台机器,导致其他人一直在等待。而其他人也是一脸懵逼,不知道这台机器到底发生了什么……

本文的目的是站在debug操作者的角度,探讨如何最小化的避免自己远程debug时对其他人造成影响。

步骤

先看一张图:
image.png
这张图的内容有三部分,都是用来设置这个断点的生效范围的。下面我们分别探讨这三部分的配置项的作用。
PS:问:怎么打开这张图? 答:打完断点后,在红色的圈圈上面右键单击(mac:两跟手指点按)

Enabled

是否可用。标识该断点是否生效。优先级最高。

Suspend

该断点的生效范围。优先级次于Enabled。
分为两个级别:

All:对整个java应用生效。程序运行到这个断点时,其他的线程都会停止,直到这个断点放开。
Thread:仅对当前线程生效。程序运行到这个断点时,不影响其他的线程。

Condition

这里写java代码。可以编写断点生效的条件。例如下图:
image.png
图中,我写了 userId == 1,意思是:当入参userId等于1时,这个断点才会生效。
本文重点
这里到了本文的重点。还拿本文开头的这个例子。我们假设A调试时使用的用户userId为1,B访问是使用的userId为2,那么A如果按照如下设置debug,就不会影响到B的使用:
image.png

最佳实践

  1. Suspend 设置为 Thread (设置为默认 : Make Default)
  2. Condition 根据该断点上方的变量,编写只对自己生效的代码。

思考

本文从debug操作者的角度,探讨如何最小化的避免自己远程debug时对其他人造成的影响。这对debug操作者有一些要求。
每一个developer都有可能是故事中的A,希望A们在远程debug的同时,养成好习惯。减少冲突,从我做起~~

相关文章
|
Linux Windows
IDEA如何查看所有的断点(Breakpoints)并关闭
【10月更文挑战第15天】在 IntelliJ IDEA 中,可以通过以下步骤查看和关闭所有断点: 1. 查看所有断点: - 打开断点窗口:菜单栏选择 “View” -> “Tool Windows” -> “Debug”,或使用快捷键 “Alt+2”(Windows/Linux)/“Command+2”(Mac)。 - 在断点窗口中,可以看到所有设置的断点列表,包括文件、行号等信息。 2. **关闭断点**: - 单个断点关闭:在断点窗口中,点击断点左侧的红点图标即可关闭。
4991 2
|
10月前
|
自然语言处理 语音技术 开发工具
CosyVoice再升级,可扩展流式语音合成
通义实验室在前期的工作中提出了基于监督离散语音标记的多语言语音合成模型CosyVoice。通过使用两种流行的生成模型:语言模型 (LM) 和流匹配进行渐进式语义解码,CosyVoice 在语音语境学习中实现了较高的韵律自然度、内容一致性和说话人相似性。
1853 1
CosyVoice再升级,可扩展流式语音合成
|
11月前
|
消息中间件 编解码 网络协议
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
1205 0
|
12月前
|
XML Java 数据格式
使用完全注解的方式进行AOP功能实现(@Aspect+@Configuration+@EnableAspectJAutoProxy+@ComponentScan)
本文介绍了如何使用Spring框架的注解方式实现AOP(面向切面编程)。当目标对象没有实现接口时,Spring会自动采用CGLIB库进行动态代理。文中详细解释了常用的AOP注解,如`@Aspect`、`@Pointcut`、`@Before`等,并提供了完整的示例代码,包括业务逻辑类`User`、配置类`SpringConfiguration`、切面类`LoggingAspect`以及测试类`TestAnnotationConfig`。通过这些示例,展示了如何在方法执行前后添加日志记录等切面逻辑。
1223 2
使用完全注解的方式进行AOP功能实现(@Aspect+@Configuration+@EnableAspectJAutoProxy+@ComponentScan)
|
SQL API 调度
Springboot2.4.5集成Quartz实现动态任务数据持久化-不怕重启服务
Springboot2.4.5集成Quartz实现动态任务数据持久化-不怕重启服务
818 0
|
自然语言处理 应用服务中间件 nginx
一文教会你 分词器elasticsearch-analysis-ik 的安装使用【自定义分词库】
这篇文章是关于如何在Elasticsearch中安装和使用ik分词器的详细教程,包括版本匹配、安装步骤、分词测试、自定义词库配置以及创建使用ik分词器的索引的方法。
一文教会你 分词器elasticsearch-analysis-ik 的安装使用【自定义分词库】
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
SQL 人工智能 Java
mybatis-plus配置sql拦截器实现完整sql打印
_shigen_ 博主分享了如何在MyBatis-Plus中打印完整SQL,包括更新和查询操作。默认日志打印的SQL用?代替参数,但通过自定义`SqlInterceptor`可以显示详细信息。代码示例展示了拦截器如何替换?以显示实际参数,并计算执行时间。配置中添加拦截器以启用此功能。文章提到了分页查询时的限制,以及对AI在编程辅助方面的思考。
2003 5
mybatis-plus配置sql拦截器实现完整sql打印
IDEA 自定义注解(类注释、方法注释)
IDEA 自定义注解(类注释、方法注释)
6034 1
IDEA 自定义注解(类注释、方法注释)
|
Java
替换jar包文件
替换jar包文件
479 0