IDEA Debug调试

debug 基本操作

这里主要描述这些按钮的用处。

按钮依次的用处是:

  • 回到断点处
  • 步过
  • 步入
  • 强制步入
  • 步出
  • 丢帧
  • 运行到光标处
  • 评估表达式
  • 跟踪当前流链
image-20220925202204677

回到断点处

当不知道当前断点停留在何处时,点击这个按钮,即可回到当前断点处。

image-20220925195821200

步过

正常执行下一行代码。

image-20220925200012141

步入

进入到方法中。

image-20220925200139665

强制步入

进入到方法的源码中。

image-20220925200509871

步出

于步入相反,步出是让方法正常执行结果,并且返回到方法调用方。

image-20220925200418736

丢帧

如果一部分代码没有调试到,可以点击这个按钮,将断点会退到原来位置。

image-20220925200948768

运行到光标处

光标指定将要执行的一行代码,点击此按钮,断点会停留到光标所在的那一行。

image-20220925201141301

评估表达式

可以通过代码段的方式,对当前的调试内容进行进一步分析。

image-20220925201413360 image-20220925201529346

跟踪当前流链

主要用于JDK8 的 Stream调试。

image-20220925201851445

针对Stream的调试,idea提供了一个很强大的功能。通过流跟踪,可以清晰的看出数据的走向。

image-20220925202115185

debug 高级操作

debug高级调试分为几种:

  • 字段断点调试

  • 异常断点调试

  • 方法断点调试

  • 手动制造抛出异常 和 强制返回

字段断点调试

字段左侧打上断点,右键断点位置,根据需要调整配置。

image-20220925091222581

我这里选中了“字段修改时监听”。

Debug时字段如果在某个位置进行了修改,断点会自动打到修改的那行代码,详细请看下方截图。

image-20220925091912211 image-20220925091944421

异常断点调试

先看一下这段代码。

1
2
3
4
5
@Test
public void exceptionTest() {
String str = null;
boolean bool = str.equals("xxx");
}

这段代码会报一个错误:NullPointerException(空指针异常),下面我们通过debug进行捕捉NullPointerException。

首先打开debug断点面板

image-20220925092700682

打开断点面板后,点击左上角加号(➕),选择Java异常断点,查找并添加NullPointerException。

image-20220925092919437

这样就能够拦截到NullPointerException了。

image-20220925093138728

方法断点调试

在方法处加入断点,右键断点进行断点详情,可以在方法输入或输出时进行调试。

image-20220925100354612

我这里选择了方法输入和方法输出,在进行debug时,断点会停留在方法的第一行和结束行。

image-20220925100741094 image-20220925100808169

手动制造抛出异常 和 强制返回

在线程执行过程中,想在某一行代码手动的制造异常抛出或者强制返回,只需要在当前帧右键,选择抛出异常(或者强制返回),输入异常值(或者返回数据),即可直接抛出异常(或者返回)。

image-20220925101818301 image-20220925102152560

debug 调试远端服务

如果通过debug 调试远端服务的代码,下面描述几种方式。

服务启动时添加参数

切记,仅可以用于测试环境。

1
oracle-java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005