当前位置: 首页 > news >正文

IDEA Debug高阶技巧

引言

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

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

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

Debug基础

在这里插入图片描述

高阶技巧-条件断点

我们构造一个List用来模拟从数据库查询出列表,第三个元素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中,可以通过以下步骤找到计算器,或者通过快捷键的方式找到计算器。
在这里插入图片描述
在这里插入图片描述

查看变量值

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

修改变量值

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

测试表达式

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

执行方法调用:

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

http://www.dtcms.com/a/533079.html

相关文章:

  • 备案做电影网站怎么自己制作一个网站
  • 腾讯云部署gitlab
  • 杭州蚂蚁 做网站的公司html官方下载
  • 构建AI智能体:七十五、用扣子平台创建工作流:从自动化到智能化的进阶之路
  • 高通AR1平台的智能眼镜全检系统
  • 搜索引擎推广的基本方法有海南搜索引擎优化
  • 做推广效果哪个网站好十堰哪家网站制作公司技术好
  • 爬完数据就完了?用 Pandas 做数据清洗与预处理
  • nestjs 架构篇:控制器、服务、数据访问
  • 【STM32】CLion STM32开发环境搭建
  • 电子商务网站开发系统平台湖北建设厅网站查询
  • 如何网站建设团队盲盒怎么制作教程
  • 网站建设北京贵金华竞价排名 金华企业网站建设
  • 腾讯微信山东区建站推广中心网站建设与管理 自考
  • 从 Thread 到 Executor 框架
  • 万字细啄常见排序算法
  • 大连网站设计收费标准海口网站建设咨询
  • 网站如何做3d产品展示做软件的公司网站有哪些
  • 装修网站制作dede电影网站源码
  • 公司网站建网电脑版微信登录入口
  • Linux C/C++ 学习日记(35):协程(五):同步、多线程、多协程在IO密集型场景中的性能测试
  • PantherX2 debain/armbian 命令无法安装Jellyfin10.11的解决办法
  • 系统架构设计师PPT课件
  • 网上书城 网站建设策划书网站流量指的是什么意思
  • NewStarCTF2025-Week3-Web
  • AI好像除了不能解决业务问题,其他问题都能解决
  • VBA技术资料MF386:贪吃蛇游戏
  • 一级域名的网站怎么做网站等保如何做
  • 网站规划与建设参考文献重庆注册公司核名在哪个网站
  • Perplexity薅羊毛攻略:安装comet失败解决以及奖励获取