跳至主要內容

IDEA Debug 技巧

三思原创大约 5 分钟javaidea-debug调试技巧代码调试断点调试

本文介绍了使用 IntelliJ IDEA 进行调试的30个技巧,包括常用调试功能说明和调试小技巧,如行断点、方法断点等。通过掌握这些技巧,可以提升开发调试效率,让工作更高效。

image
image

IDEA Debug 技巧

掌握 IDEA 这 30 个 Debug 小技巧,开发、改 Bug 速度快10倍

image

写Bug、改Bug几乎占据了程序员日常工作的绝大部分时间,如果你能掌握一手调试代码的绝技,相信工作效率必定会得到大幅度的提升;

IDEA 就为我们提供了很多简单且非常强大的调试功能,但是发现有些小伙伴并没有完全用上,今天就一起来玩一下那些Debug的奇淫巧计;30来个功能及调试小技巧,学完后让你开发调试效率提升个10倍!争取做到早上9点上班,10点就能下班 (小声说:是晚上10点【手动狗头】)

本文的目录:

image

IDEA的Debug控制台在整个窗口的左下方;

image

IDEA 调试功能说明

  • Show Execution Point

    快捷键:Alt + F10

    回到当前激活的断点处;当你的鼠标不在断点所处的行,点击之后,会立马复位到断点处;

    image

  • Step Ove

    快捷键:F8

    单步调试;逐行往下执行,如果执行行有其他方法,不会进入对应的方法;日常Debug用的最多的一个功能

    image

  • Step Into

    快捷键:F7

    进入方法体内部。该功能会进入自定义的方法或者三方库的方法;注意,不会进入JDK的方法

    image

  • Force Step Into

    快捷键:Alt + Shift + F7

    强制进入方法体内部,与Step Into​不同的是,会进入JDK的方法;

    image

  • Step Out

    快捷键:Shift + F8

    跳出方法体;一般会配合(Force)Step Into​一起使用

    image

  • Drop frame

    回到方法的调用处,同时上下文内所有的变量的值也回到那个时候。

    该按钮能够点击的前提条件是:当前所处的方法有上级方法,如果你是main方法里,那么按钮就是灰色,无法点击;

    image

    640

  • Run to Cursor

    快捷键:Alt + F9

    将代码运行到光标处,光标停在哪里就运行到哪里;

    image

  • Evaluate Expression

    快捷键:Alt + F8

    表达式计算器;可执行任意合法的表达式。

    image

  • 640

  • Trace Current Stream Chain

    追踪当前Stream流;只有在Stream代码上,此按钮才会亮起。

    image

  • Rerun Main

    快捷键:Ctrl + F5

    查询执行Debug;

    image

  • Resume Program

    快捷键:F9

    恢复程序;当因为断点导致代码停止之后,此功能可以让持续恢复执行;有下一个断点时,会跳转到下一个断点;没有下一个断点,会执行到持续结束;

    image

  • Stop Main

    快捷键:Ctrl + F12

    停止程序;

    image

  • View Breakpoints

    快捷键:Ctrl + Shift + F8

    打开断点管理窗口;

    image

  • Mute Breakpoints

    停用所有的断点;

    image

  • Get Thread Dump

    拿到当前线程的Dump,可以查看当前线程的状态;

    image

  • 筛选

    image

调试小技巧

行断点

行断点的图标是一个 圆形的红点,在需要断点的代码行头点击,即可添加断点

640

方法断点

将断点打在某个具体的方法上,方法执行的时候,会进入断点;

举个方法调试最常用的Debug场景:

当阅读源码或者自己写业务需求的时候,经常会用到策略、模板方法等设计模式;在调试的时候,需要知道,当前接口方法或者抽象方法的执行,到底是走的哪一个具体的实现,用方法调试就能很方便的找到;如下示例;

image

640

接口Service​有两个具体的实现:ServiceA​和ServiceB​,分别实现了接口的method​方法,调试的过程中就可以将断点打在接口的method方法上;当我们在Main方法中实例化了ServiceB,断点就自动进入到ServiceB的method()方法了;

  • 接口Service

    public interface Service {
        void method();
    }
    
    • ServiceA

      public class ServiceA implements Service{
          @Override
          public void method() {
              System.out.println("Service A");
          }
      }
      
    • ServiceB

      public class ServiceB implements Service{
          @Override
          public void method() {
              System.out.println("Service B");
          }
      }
      
  • Main

    public class Main {
        public static void main(String[] args) {
            Service serviceB = new ServiceB();
            serviceB.method();
        }
    }
    

更多功能点

image

  • Condition

    用于输入表达式,进行过滤

  • Watch

    Method entry 和 Method exit 至少有一个选项存在。

    • Emulated

      用于提高调试性能

    • Method entry

      进入方法时激活断点

    • Method exit

      退出方法时激活断点

属性断点

在属性的行头点击即可添加一个小眼睛一样的属性监听断点,用于监听某个属性的读写变化过程;

640

更多功能点

image