Redian新闻
>
IDEA Debug 高阶技巧,老手都是这么玩的~~

IDEA Debug 高阶技巧,老手都是这么玩的~~

公众号新闻

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入芋道快速开发平台知识星球。下面是星球提供的部分资料: 

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn
【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本 

来源:juejin.cn/post/
7308539123537592357


目录

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

引言

IntelliJ IDEA,由JetBrains(捷克共和国)开发的一款强大的Java集成开发环境(IDE),因其丰富的功能、智能的代码辅助以及用户友好的界面设计,在全球范围内广受Java开发者的喜爱,在国内,笔者遇到过不使用IDEA的Java程序员不超过三个。不仅限于Java,IntelliJ IDEA还支持多种其他编程语言和框架,如KotlinScalaGroovy以及Android开发等,这进一步扩大了其用户基础。其社区版是免费的,而专业版则提供了更为高级的功能。

Debug(调试)是软件开发中不可或缺的一个环节。它使开发者能够逐行执行代码,检查运行时的状态,包括变量值、内存占用、线程状态等,从而帮助开发者理解代码的实际行为,定位并修复错误。良好的调试工具可以显著提高问题解决的效率,减少猜测工作,帮助开发者构建更加稳定、高效的软件系统。


在本文中,我将向大家介绍及演示IDEA的高阶Debug技巧,包含但不限于:

  • 条件断点(Conditional breakpoint): 允许开发者设置特定条件,只有当这些条件满足时,程序才会在这些断点处暂停执行。这对于调试复杂的循环和分支逻辑尤其有用,因为它可以让你聚焦于特定的执行路径或案例。
  • 计算器(Evaluate Expression): 这个功能允许开发者在调试会话中计算表达式的值,不仅可以查看变量的当前值,还可以执行表达式,甚至调用方法。这对于验证假设和测试代码更改而无需重新启动整个调试会话非常有用。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

Debug基础

写一段代码,开启调试:

操作WindowsMac(OS X)
进入下一步,如果当前行断点是一个方法,则不进入当前方法体内F8F8(Fn)
进入下一步,如果当前行断点是一个方法,则进入当前方法体内, 如果该方法体还有方法,则不会进入该内嵌的方法中F7F7(Fn)
智能步入,断点所在行上有多个方法调用,会弹出进入哪个方法Shift + F7⇧F7 (Fn)
智能跳出Shift + F8⇧F8 (Fn)
恢复程序运行,如果该断点下面代码还有断点则停在下一个断点上F9F9(Fn)
运行到光标处,如果光标前有其他断点会进入到该断点Alt + F9⌥F9(Fn)
计算表达式(可以更改变量值使其生效)Alt + F8⌥F8 (Fn)
切换断点(若光标当前行有断点则取消断点,没有则加上断点)Ctrl + F8⌘F8 (Fn)
查看断点信息Ctrl + Shift + F8⌘⇧F8 (Fn)

表格来源于:程序猿DD

高阶技巧-条件断点

我们构造一个List<User>用来模拟从数据库查询出列表,第三个元素id=3中的age属性是null,我们在for循环中使用加法来触发Integer类型的拆箱来出发空指针异常。

public class IDEATest {
 public static void main(String[] args) {

  List<User> userList = new ArrayList<>(6);
  userList.add(new User(1"Tom"19));
  userList.add(new User(2"Giles"25));
  userList.add(new User(3"Alex"null));
  userList.add(new User(4"Ryan"21));
  userList.add(new User(5"DongGe"19));
  userList.add(new User(6"RUI"21));

  userList.forEach(user -> {
   String name = user.getName();
   int futureAge = user.getAge() + 10;
   System.out.println(name + " 10年后" + futureAge + "岁");
  });
 }

}

@Data
@AllArgsConstructor
@NoArgsConstructor
class User {
 private Integer id;

 private String name;

 private Integer age;
}

可以看到IDEA提示了第25行代码报了错,我们定位到第25行代码内容:

为了定位问题,我们在第25行打个断点:

null + 10

在Java中,null是一个字面量,用来表示没有任何对象与之关联的引用。而+操作符在Java中主要有两种用途:一是作为数学加法运算符,用于基本数据类型的数值相加;二是作为字符串连接运算符,用于将两个字符串拼接在一起。

当你尝试执行null + 10这样的表达式时,Java会尝试找到一个合适的操作符重载来处理这个表达式。由于null不是一个数值,所以不能直接进行数学加法。但是,如果参与+操作的任一操作数是一个字符串,Java会将另一个操作数转换为字符串,并执行字符串连接操作。

条件断点应用场景

为了定位到具体哪一条数据出了问题,我们需要按F9或点击箭头处按钮直到循环到错误数据,案例中共6条数据,即使最后一条数据错误,我们也只需要按五次即可发现问题数据,但是在正式/测试环境中,你无法确认从数据库中查询到多少条数据,假如是1000条,接下来很长一段时间你将被这个问题所困扰。显然我们应该拒绝这种没有效率、无意义、重复性的工作。

如何添加条件断点

鼠标移至红色断点处,使用右键:

Condition中添加判断条件,上文中出现的异常是NullPointerException,我们就判断循环中的user对象age变量为null的即可:

Objects.isNull(user.getAge())  

点击Done,确认。

重启Debug,我们可以看到循环出的第一条数据不再是列表的第一条,而是问题数据:

这样我们便可以很快的定位到错误数据,解决问题。

条件断点对于阅读源码的帮助

例如,我们在阅读Spring Framework源码时,条件断点可以帮助我们快速定位到正在目标Bean。

Spring Boot项目在启动时,会加载所有被标注的元数据,此时我们自定义了一个Bean的类型叫a,我们可以在BeanFactoryUtils对应的加载方法中添加条件断点,这样就可以更快的查看我们自定义的Bean的加载逻辑。

高阶技巧-计算器

在2023新版IDEA中,可以通过以下步骤找到计算器,或者通过快捷键的方式找到计算器。

查看变量值

在断点暂停时,你可以使用计算器来查看和评估变量的当前值,这比在变量监视窗口中查找要快得多。

修改变量值

修改变量值:如果你想要测试代码对于不同变量值的反应,可以使用计算器改变变量的值,而无需修改代码并重新启动调试过程。

测试表达式

如果你在编写代码时不确定某个表达式的结果,可以使用计算器快速进行测试,而不必写额外的测试代码或者等待代码运行到那一点。

执行方法调用:

通过计算器,你可以在不影响当前程序执行状态的情况下执行方法,这样可以帮助你理解方法的行为或者验证方法的返回值。


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,长按”或“扫描”下方二维码噢

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

文章有帮助的话,在看,转发吧。

谢谢支持哟 (*^__^*)

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
7057 血壮山河之枣宜会战 宜昌溃战 13一个提升自控力的作弊技巧,很多人都没想到穿它=换腿!空姐爱穿、动手都撕不烂的丝袜,穿起来太带感了!别再被大模型骗了,一个小技巧,让LLaMa3诚信度提升65%平台必争的本地生活服务,都是怎么玩的?搭载华为高阶智驾的车售价低于30万都亏损?华为车BU回应一个夺回注意力的小技巧,三个字拿捏人性,高手都深谙这个道理一个尘封 55 年的 Bug!由 17 岁学生开发、风靡了半个世纪的经典游戏,被退休程序员发现关键 BugNature:这12个技巧,彻底克服写作SCI论文的障碍!巧用 20 个 Linux 命令贴士与技巧,让你生产力瞬间翻倍?啊,一把手都给免了抢沙发闹出的大笑话收好这3个搭配技巧,同一件单品也能穿出多种风格坐飞机总是腹胀?专家揭秘:只需一个小技巧,让飞机旅行不再“气势汹汹”!我和老伴(外一篇)比董宇辉还火,比春晚好看,“王婆说媒”成月老手下销冠,网友:连夜扛着火车也要去开封一个延长快乐的简单技巧,却常常被我们忽视Stability AI开源3B代码生成模型:可补全,还能Debug刘强东“替身”直播带货!全是技巧,毫无感情……OpenAI官宣开源Transformer Debugger!不用写代码,人人可以破解LLM黑箱美股基本面 - 2024_03_07 * 晨报 * 日元兑美元涨1% 薪资数据强于预期促使市场押注日本央行3月加息。美股中概股每天一个“反套路”小技巧,觉醒就从今天开始!发二区SCI竟这么简单!强烈建议小白都来学的高阶SCI套路!(大佬手把手教学)分享6个实用小技巧,让基金定投“赚更多”!歌星之梦姐弟恋新剧The Idea of you一点也不好看 太失望了ICLR 2024 Oral|用巧妙的「传送」技巧,让神经网络的训练更加高效穿它=换腿!空姐爱穿、男友动手都撕不烂,穿起来太带感了!一个小技巧,解锁ChatGPT「预测未来」?真香!顶刊都爱的酷炫美图技巧,0代码入门,让你轻松发一区SCI....8个作弊技巧,让发量逆袭!Hi friends, any idea what caused the scratchesShowMeBug李亚飞:IDE与AI自动编程技术将增强超级程序员文献综述如何写出彩?老手有话说书友会 | 识人攻略:高手都在用的30个职场锦囊ICLR 2024|用巧妙的「传送」技巧,让神经网络的训练更加高效
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。