网站通栏广告代码,中核集团为什么排央企第一名,找外包做网站要多久,海淀区目录 引言一、断点分类#x1f384;1.1 行断点1.2 方法断点1.3 属性断点1.4 异常断点1.5 条件断点1.6 源断点1.7 多线程断点1.8 Stream断点 二、调试动作✨三、Debug高级技巧#x1f389;3.1 watch3.2 设置变量3.3 异常抛出3.4 监控JVM堆大小3.5 数组过滤和筛选 引言
使用ID… 目录 引言一、断点分类1.1 行断点1.2 方法断点1.3 属性断点1.4 异常断点1.5 条件断点1.6 源断点1.7 多线程断点1.8 Stream断点 二、调试动作✨三、Debug高级技巧3.1 watch3.2 设置变量3.3 异常抛出3.4 监控JVM堆大小3.5 数组过滤和筛选 引言
使用IDEA进行调试的基础知识和高级用法。调试(debug)是开发中最快解决问题的方式。详细介绍了IDEA中的四种基本断点类型并介绍了8种不同类型的断点包括条件断点、原断点、多线程断点、Stream断点等。通过这些断点开发者可以更好地控制代码的运行流程以找到问题所在。这些知识可以帮助开发者更高效地进行调试和排错。
一、断点分类
1.1 行断点
在 IntelliJ IDEA 中行断点Line Breakpoint是一种最常见的调试工具用于在代码中的某一行设置一个中断点以便调试程序时暂停执行从而检查程序的状态。 使用 当你在调试模式下运行程序时程序会在设置的断点处停止执行。
在调试过程中你可以
查看变量值在“变量”窗口中查看当前的局部变量和全局变量的值。检查堆栈查看调用堆栈信息了解程序执行的调用顺序。控制程序流使用工具栏中的控制按钮如继续、单步执行等来控制程序的执行流程。 1.2 方法断点
方法断点Method Breakpoint是 IntelliJ IDEA 中的另一种调试工具用于在方法的入口或出口处暂停程序的执行。与行断点不同方法断点无需指定具体的代码行而是直接绑定到方法本身在进入和退出方法都会在断点处被停止。 使用 触发时机
方法断点可以在方法 调用时入口 或 方法返回时出口 暂停程序。支持捕获方法的所有调用方无论调用来自哪里。
适用场景
调试一个方法被调用的频率或调用路径。检查某方法的入参和返回值。分析哪些地方调用了方法特别是工具类或公共方法。
性能开销
方法断点性能较低特别是高频调用的方法可能导致调试器反应缓慢或程序变卡。因此慎用方法断点。 1.3 属性断点
属性断点Field Breakpoint 或 Watchpoint是 IntelliJ IDEA 中的一种断点类型专门用于监控某个字段属性的 值变化 或 访问。当程序对指定的属性执行读取Read或写入Write操作时调试器会暂停程序允许你查看运行状态。 使用 触发时机
读操作Field Access当代码读取该字段的值时触发。写操作Field Modification当代码对该字段的值进行修改时触发。
适用场景
检查属性的值何时被读取或修改。排查意外的属性值变化问题如多线程导致的值被修改。监控静态字段或常用的全局变量。
性能开销
属性断点可能会对性能产生较大的影响特别是高频访问的字段。因此建议在调试时使用调试结束后移除或禁用。 在属性处打上断点并右键断点并勾选Field access此时以debug模式运行所有属性发生变化的方法中的行都会被拦截 1.4 异常断点
异常断点Exception Breakpoint是 IntelliJ IDEA 提供的一种调试工具用于在程序抛出指定异常时自动暂停程序的执行无论异常发生在何处。这对于排查未捕获异常或异常传播链是非常高效的工具这个断点在排查报错抛异常时非常好用它可以捕获所有异常也可以捕获指定异常此处以最常见的空指针为例 使用 触发时机
当程序抛出指定异常时无论是否被捕获。默认情况下只在异常未被捕获Uncaught时触发但可以配置为 在捕获时Caught 也暂停。
适用场景
调试运行时异常如 NullPointerException、IllegalArgumentException。追踪异常是如何发生的以及调用链。排查捕获异常后处理逻辑的行为。
作用范围
异常断点适用于整个应用无需手动在每个方法中设置断点。
使用快捷键ctrlshiftf8部分机型为ctrlshiftf8fn打开断点面板点击左上角的添加Java Exception BreakPoint再输入NullPointerException 此时不用在代码中手动打断点当出现空指针时会自动定位到出现空指针的代码行 1.5 条件断点
条件断点Conditional Breakpoint是调试器中的一种高级功能用于在断点设置的代码位置只有满足指定条件时才会暂停程序的执行。这使得调试更加高效因为你可以过滤掉不感兴趣的程序状态聚焦于特定情况。 使用 触发条件
断点会在指定的代码行被执行时检查用户提供的条件表达式。只有条件表达式的结果为 true 时断点才会触发。
适用场景
跟踪某一特定值时的代码行为。排查循环中某些特定迭代的异常问题。监控特定条件下的变量值或状态。
无干扰调试
避免程序在每次执行断点时都暂停只在条件满足时中断减少不必要的干扰。
在你需要打打断点的代码行打上断点右键输入条件当条件为true时断点才会生效。
此处在for循环中i等于5时断点才会生效否则继续执行。 1.6 源断点
设置这个断点只需按住shift鼠标左键并设置需要输出的到控制台的变量 运行时程序不会在断点处停止但是会把设置的变量都打印到控制台。 1.7 多线程断点
多线程断点 是调试器在多线程环境中提供的一种功能用于帮助开发者调试和分析多线程程序的行为。由于多线程程序中的代码会被多个线程并发执行断点可能会在不同的线程上触发调试起来相对复杂。 使用 线程相关性
断点可以在特定线程上触发也可以暂停所有线程。可以查看和分析不同线程的调用堆栈和变量状态。
独立线程调试
IDEA 允许你选择仅调试特定线程而不影响其他线程。
线程竞争分析
配合条件断点和日志功能可以分析线程间资源竞争和同步问题。
分别在两处多线程的代码行打上断点并右键断点选择Thread
开始运行时可以手动切换线程运行顺序以此模拟线程的轮询执行 1.8 Stream断点
在使用了Stream流式操作的语句上打上断点此时我们先过滤大于5的数字在过滤小于8的数字 点击菜单选择Trace Current Stream Chain此时将会展示整个流式操作处理。 二、调试动作✨ Step Over一行一行的执行代码不会进入方法中但是方法中有断点时会进入方法内的断点中Force Step Over一行一行的执行代码和Step Over最大的区别时就算方法中存在断点也不会进去。Step Into进入方法内部外部jar包无法进入Force Step Into进入方法内部也可以进入外部jar包Smart Step Into当一行代码中存在多个方法比如方法嵌套使用Smart Step Into可以任意选择进入想要进入的方法。Step Out当进入方法内部时使用Step Out可以退出至方法调用处。Setp Out of Block当调试for循环或while循环时可以使用它跳出循环Run to Cursor跳到鼠标光标所在处相当于鼠标在的位置打了断点但是前一个执行到的位置和光标之间还有断点时就会先跳转到中的断点处Force Run to Cursor强制跳到光标所在位置哪怕前一个执行到的位置和光标之间还有断点时也会直接跳到光标的位置忽略中途的断点Force return当debug时想要结束运行但是后面的代码仍然会执行有插入数据的操作时不想执行后面的插入数据的代码又不想结束项目这时可以使用它来强制返回返回值为void时直接结束有返回时直接输入null返回空就行。Resume Program一直执行到下一个断点直到程序结束或方法调用完成。
三、Debug高级技巧
3.1 watch
在 IntelliJ IDEA 中Watch监视 是一个非常强大的调试功能它可以帮助你实时观察变量、表达式或方法的值尤其在复杂的调试场景中非常有用。 使用 在debug时右键想要监视的变量点击Add to Watchsidea就会将监视的变量单独列出 注意如果监视了变量但红色框中的区域没有出现需要手动开启点击红框上方的Layout setting再勾选watches即可
3.2 设置变量
当在有if判断时如果触发true的代码非常复杂则可以使用变量设置来修改if的判断条件或者当传参时某一个变量或对象缺失可以直接设置变量来查看代码运行的效果。 将其修改为true 3.3 异常抛出
当我们希望测试抛出异常后的代码逻辑就可以使用debug中的throw exception 此时手动抛出一个空指针异常 此时便可以捕获到异常观察异常抛出后的代码逻辑 3.4 监控JVM堆大小
该方法可以监控JVM创建了多少次实例没有该面板的话需要点击上方的layout setting打开和watches打开方式相同 3.5 数组过滤和筛选
在使用数组或列表时Map也可以想要观察某个特定的对象是否存在可以使用筛选的功能通过表达式将其筛选出来。 通过表达式将其筛选出写表达式时需要注意其中的元素类型