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

IntelliJ IDEA断点调试全攻略

在 IntelliJ IDEA 中使用断点是调试代码的核心技能,非常强大且直观。

一、 最基础:行断点 (Line Breakpoint)

这是最常用、最简单的断点。用于在特定的代码行暂停程序执行。

操作步骤:

  1. 打开任意一个 Java 文件。
  2. 在你想要暂停执行的代码行号旁边,单击鼠标左键。你会看到一个红色的圆点出现,这就表示行断点已经设置成功。

二、 开始调试 (Start Debugging)

仅仅设置断点是不够的,你需要以调试模式运行你的程序,断点才会生效。

操作步骤:

  1. 在代码编辑区域的任意位置右键。

  2. 选择 Debug 'YourClassName.main()' (或者是你当前的运行配置)。

  3. 也可以使用快捷键:在 macOS 上是 ^ + D,在 Windows/Linux 上是 Shift + F9

程序启动后,会正常运行,直到遇到你设置的断点,执行就会自动暂停,IDEA 会焦点会切换到调试窗口。


三、 理解调试界面 (Debug Tool Window)

当程序在断点处暂停时,你会看到以下核心界面,这是查看和分析程序状态的关键:

  1. 代码执行位置指示:高亮显示下一步将要执行的代码行。
  2. 调试工具栏 (最重要!):控制程序如何继续执行。
  3. 变量查看窗口 (Variables):显示当前作用域内所有变量的值。这是查看对象状态、查找 bug 的核心区域。
  4. 观察窗口 (Watches):可以手动添加你特别关心的变量或表达式,进行持续观察。
  5. 调用栈 (Frames):显示当前线程的调用方法栈,可以看到程序是如何一步一步执行到当前位置的。

四、 控制程序执行 (Debugger Controls)

这是调试的灵魂。程序暂停后,你有以下几个选择来决定它“下一步怎么走”:

图标名称快捷键 (Windows)作用
➡️Step Over (步过)F8执行当前行,并转到下一行。如果当前行是一个方法调用,不会进入方法内部。
⬇️Step Into (步入)F7执行当前行。如果当前行有自定义方法调用,会进入该方法的内部。(注意:不会进入JDK等库的源码,除非你下载了源码)
↪️Step Out (步出)Shift + F8将当前方法剩余的部分执行完,并返回到调用该方法的位置
🔄Force Step Into (强制步入)Alt + Shift + F7强制进入任何方法,包括JDK库方法。
🚀Resume Program (恢复程序)F9继续运行程序,直到遇到下一个断点或程序结束。
Stop (停止)Ctrl + F2终止调试会话。

简单比喻:

  • F8 (Step Over):看完这一页书,就翻到下一页。
  • F7 (Step Into):看到书里提到了一个概念,就翻到附录去查看这个概念的详细解释。
  • Shift + F8 (Step Out):在附录里看完了概念解释,合上附录,回到原来读书的那一页。
  • F9 (Resume):不想一页页看了,直接看到下一个有意思的章节(下一个断点)为止。

五、 高级断点技巧

让你的调试更高效。

1. 条件断点 (Conditional Breakpoint)

如果断点在一个会被循环很多次或者被频繁调用的地方,你只希望在满足特定条件时才暂停。

操作步骤:

  1. 右键点击红色的断点图标。
  2. 在条件 (Condition) 输入框中,输入一个布尔表达式(例如 i > 5user.getName().equals("Alice"))。
  3. 勾选后,程序只会在表达式为 true 时才会在此断点暂停。
2. 临时禁用断点

不想删除断点,只是想暂时关闭它。

操作步骤:

  • 右键点击断点,取消勾选 Enabled。断点会变成灰色。
3. 异常断点 (Exception Breakpoint)

程序会在抛出指定异常时自动暂停,无论你是否在代码中设置了断点。这在定位未知的异常来源时极其有用!

操作步骤:

  1. 打开 View -> Breakpoints (快捷键 Ctrl+Shift+F8)。
  2. 点击 + 号,选择 Java Exception Breakpoints
  3. 输入异常类型名(如 NullPointerException)。
  4. 之后,只要程序抛出该异常,执行就会立即暂停,并定位到抛出异常的那一行代码。

实战调试流程示例

假设你有以下一段代码:

public class DebugExample {public static void main(String[] args) {int sum = 0;for (int i = 1; i <= 5; i++) { // 在第3行设置一个断点sum += i;System.out.println("i = " + i + ", sum = " + sum);}System.out.println("Total sum: " + sum);}
}
  1. 在第3行 (for (int i = 1; ...) 设置一个普通断点。
  2. 右键选择 Debug 'DebugExample.main()'
  3. 程序启动并在第3行暂停。注意:第3行还没有执行!
  4. F8 (Step Over) 一次,执行 int i = 1,现在 i 的值在 Variables 窗口里变为 1
  5. 再按 F8 一次,进入循环体第一行 (sum += i;)。此时可以看到 sum0 变成了 1
  6. 继续按 F8,你会看到程序在循环中一步步执行, Variables 窗口中的 isum 值在不断变化。
  7. 如果你想快速结束循环,可以在 System.out.println("Total sum: ... 这一行设置第二个断点,然后按 F9 (Resume),程序会直接运行到循环结束,停在下一個断点上。

总结

  1. 设断点:在行号旁点击。
  2. 启调试:用 Debug 模式运行,不要用 Run
  3. 看状态:在 Variables 窗口观察变量值。
  4. 控执行:使用 F8, F7, F9 等快捷键控制“下一步”。
  5. 提效率:善用条件断点异常断点

多练习几次,你就能熟练掌握这项极其重要的开发技能,解决bug的效率会大大提升!


文章转载自:

http://Ztgpk06P.csxLm.cn
http://sleSy3Mz.csxLm.cn
http://3IyublQ0.csxLm.cn
http://2YPnXAqT.csxLm.cn
http://VpT8wZ9C.csxLm.cn
http://T80lk9DV.csxLm.cn
http://5x38pz8L.csxLm.cn
http://ldNPEqwW.csxLm.cn
http://b7IwsDEF.csxLm.cn
http://MT8AYdfJ.csxLm.cn
http://WHfLpSP5.csxLm.cn
http://9FOWbdph.csxLm.cn
http://CRAmJqjp.csxLm.cn
http://I62PtVdt.csxLm.cn
http://3WlL287n.csxLm.cn
http://PTnCOBs4.csxLm.cn
http://lYr7PAAk.csxLm.cn
http://D9qv8V0k.csxLm.cn
http://vnK7tjK3.csxLm.cn
http://DBOImqPq.csxLm.cn
http://ku2nqjnD.csxLm.cn
http://rexIGnZZ.csxLm.cn
http://eLCx9lEd.csxLm.cn
http://pIC0J2B7.csxLm.cn
http://ieuEfhXF.csxLm.cn
http://hs6DJSHl.csxLm.cn
http://U2WbRWwH.csxLm.cn
http://AvKzGyXQ.csxLm.cn
http://YYkUHBJK.csxLm.cn
http://VlfoLFPf.csxLm.cn
http://www.dtcms.com/a/375379.html

相关文章:

  • OceanBase存储过程基本使用
  • 使用 OBD 交互式部署单点OceanBase数据库
  • 内存管理这一块
  • 【深度学习新浪潮】什么是具身智能?
  • Linux tc 常用命令总结(网卡限速、延迟、丢包与整形)
  • Windows 命令行:路径末端的反斜杠
  • Shell脚本编程基本认识
  • Redis 面试
  • 大学地理信息科学该如何学习才能好就业
  • 浅谈“SVMSPro视频切片”技术应用场景
  • OpenHarmony多模输入子系统全链路剖析:从HCS配置到HDI芯片驱动源码深度解读
  • 1. linux 下qt 应用开机自启,需要sudo时
  • QML中的Popup
  • Cursor Pro试用
  • shell介绍
  • vla 开源最强的模型是哪一个
  • FreeRTOS任务切换详解
  • 面试不会问题
  • 享元模式,用Qt/C++绘制森林
  • GO RPC 教学文档
  • Atlantis Word Processor:全方位的文字处理专家
  • [iOS] 单例模式的深究
  • 视频通话实现语音转文字
  • String-HashCode源码分析
  • 深入浅出C++继承机制:从入门到实战
  • 级联框的实现
  • android 性能优化—内存泄漏,内存溢出OOM
  • 从PyTorch到ONNX:模型部署性能提升
  • JAVA:实现快速排序算法的技术指南
  • SQL 触发器从入门到进阶:原理、时机、实战与避坑指南