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

【idea】调试篇 idea调试技巧合集

前言:之前博主写过一篇idea技巧合集的文章,由于技巧过于多了,文章很庞大,所以特地将调试相关的技巧单独成章, 调试和我们日常开发是息息相关的,用好调试可以事半功倍

文章目录

    • 1. idea调试异步线程
    • 2. idea调试stream流
    • 3. 根据条件进入断点
    • 4. 调试当前代码行
    • 5. 修改变量值调试
    • 6. 监控断点

1. idea调试异步线程

默认idea是调试主线程的,如果开启了异步线程 打断点不会进入,这在我们调试源码时不方便(例如redisson的源码会有大量异步线程的操作)

我们只需要在断点右键 在Supend选择Thread
(要注意的是 选择Thread的断点需要全面 例如A线程之后的代码开启了异步线程B,异步线程B下面有异步线程C的代码 断点需要在A/B/C线程都选上Thread 否则仍然不会进入C)
在这里插入图片描述

2. idea调试stream流

idea2024是非常方便调试的,不用额外操作;
在早些版本中:点击Trace Current Stream Chain 查看流的每步操作
在这里插入图片描述

3. 根据条件进入断点

断点右键写上Condition条件表达式即可,这在循环调试中非常方便,举个栗子:
在这里插入图片描述
直接跳过了前面无关数据

4. 调试当前代码行

我们用例子来解释是什么意思:

如下图 我们模拟了两个断点
在这里插入图片描述
一般情况下 我们会选择打多个断点 一步步调试,执行完第一个断点后,我们通常点击 跳到下一个断点
在这里插入图片描述
经常调试源码的同学应该深有体会,断点打一堆后会多不方便;拿jdk源码来说,在某个方法打上一个断点,有N多其它线程可能执行到断点。

那我们有没有什么方式 不打断点也能调试呢? 有的,有的,确实有的:
鼠标光标放在要调试的那行代码,按 ctrl + alt + F9
(博主idea用的是eclipse的那套快捷键,如果不是用的这套快捷键 不生效的话 试试 alt + F9 )
在这里插入图片描述
如上图,不打断点 仍然可以调试

5. 修改变量值调试

我们还是拿一个循环来举例:
我们不想关心 i<9 的逻辑时,可以在调试时 右键选择 evaluate expression
在这里插入图片描述
在expression时直接修改变量
在这里插入图片描述

6. 监控断点

监控断点是打在全局变量上面的断点,每当变量值发生变化的时候 都会有提示:

如图,我们只在定义变量时手动打上断点:
在这里插入图片描述

随着我们执行代码,在变量发生修改时 会自动提示:
在这里插入图片描述


public class DebugTest {static String name = "";public static void main(String[] args) {name = "csdn:孟秋与你";DebugInnerTest debugInnerTest = new DebugInnerTest();name = debugInnerTest.modifyName(name);System.out.println(name);}
}class DebugInnerTest {public String modifyName(String name) {return "修改名";}
}

因为局部变量的生命周期仅在其作用域内有效(如函数、循环等),IDEA 无法直接在局部变量上设置独立的数据断点(监视值变化);在实际开发时,如果遇到某个方法内部的局部变量值很难调试 想监听时,那把它先定义成全局变量即可 调试完再改回去。

http://www.xdnf.cn/news/448489.html

相关文章:

  • QFileDialog文件选择框
  • 解决 PicGo 上传 GitHub图床及Marp中Github图片编译常见难题指南
  • acwing 3653. 好坑的电子地图 最短路 dijkstra算法
  • 如何用Redis实现分布式锁?RedLock算法的核心思想?Redisson的看门狗机制原理?
  • Openshift节点Disk pressure
  • 03_朴素贝叶斯分类
  • Python常见问题
  • Python+大模型 day01
  • Java大师成长计划之第22天:Spring Cloud微服务架构
  • 采用均线策略来跟踪和投资基金
  • 通用软件项目技术报告
  • MySQL知识点总结(持续更新)
  • 【计算机网络】TLS中的对称加密和非对称加密的应用,应对第三方抓包的双向https认证
  • PLM系统如何实现跨部门数据共享?七项核心功能打通信息孤岛
  • Java项目拷打(外卖+点评)
  • lesson01-PyTorch初见(理论+代码实战)
  • AI数字人实现原理
  • std::ratio<1,1000> 是什么意思?
  • PYTHON训练营DAY25
  • WMS仓储管理系统可以跟哪些系统集成
  • ChatPromptTemplate创建方式比较
  • 2025 uniapp的请求封装工具类以及使用【拿来就用】
  • 虚拟机安装CentOS7网络问题
  • Java 日期解析与格式化:从标准格式到自然语言解析
  • 【Bootstrap V4系列】学习入门教程之 组件-分页(Pagination)
  • 如何利用 Java 爬虫获得京东(JD)商品详情:实战指南
  • windows10 安装 QT
  • 国产之光--腾讯云推出AI编程智能助手CodeBuddy
  • HPE ProLiant DL360 Gen11 服务器,配置 RAID 5 教程!
  • Linux篇 第2章Linux基础指令