目录

  • 1 Debug简介
  • 2 基本用法
  • 3 智能步入
  • 4 断点条件设置
  • 5 手动修改程序中变量的值
  • 6 计算表达式
  • 7 异常断点
  • 8 字段断点(监听这个字段)
  • 9 Variables和Watches
  • 10 Stream流


1 Debug简介

  • 开发中,可以使用Debug来追踪代码的运行流程;
  • 如果程序运行中出现异常,启用Debug模式可以定位异常发生的位置、以及在运行过程中参数的变化;
  • 也可以启用Debug模式来追踪代码的运行流程去学习第三方框架的源码;

首先看下IDEA中Debug模式下的界面,如下是在IDEA中启动Debug模式,进入断点后的界面:

  1. 以Debug模式启动服务;
  2. 断点:在左边行号栏单击左键;
  3. Debug窗口:访问请求到达第一个断点后,会自动激活Debug窗口;
  4. 调试按钮:调试的主要功能就对应着这几个按钮,菜单栏Run里可以找到同样的对应的功能;
  5. 服务按钮:可以在这里关闭/启动服务,设置断点等;
  6. 方法调用栈:这里显示了该线程调试所经过的所有方法,勾选右上角的[Show All Frames]按钮,就不会显示其它类库的方法了,否则这里会有一大堆的方法;
  7. Variables:在变量区可以查看当前断点之前的当前方法内的变量;
  8. Watches:可以做更加复杂的东西,比如可以观察将变量做一些处理后的结果;

2 基本用法

1 第一组按钮

idea android app动态调试 idea debugger调试_java


从左到右依次解释:

  1. Show Execution Point:如果你的光标在其它行或其它页面,点击这个按钮可跳转到当前代码执行的行;
  2. Step Over:步过,一行一行地往下走,如果这一行上有方法不会进入方法;
  3. Step Into:步入,如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法;
  4. Force Step Into:强制步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法;
  5. Step Out:步出,从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值;
  6. Drop Frame:回退断点(新版IDEA的Dubug按钮组中没有Drop Frame 按钮,我们可以用 Reset Frame 来代替;
  7. idea android app动态调试 idea debugger调试_字段_02


  8. Run to Cursor:运行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点;
  9. Evaluate Expression:计算表达式的值。这个表达式不仅可以是一般变量或参数,也可以是方法,当一行代码中调用了几个方法时,就可以通过这种方式查看某个方法的返回值;另外,在表达式的框里,可以改变变量的值,方便地调试各种值下的情况;

2 第二组按钮

idea android app动态调试 idea debugger调试_java_03


从上到下依次解释:

  1. Rerun ‘xxxx’:重新运行程序,会关闭服务后重新启动程序;
  2. Modify Run Configuration:修改运行配置;
  3. Resume Program (F9):恢复程序。如果下面有代码,则跳转到下面的断点;如果下面代码没有断点,那么执行完全部代码;
  4. Pause Program:暂停程序;
  5. Stop ‘xxx’ (Ctrl + F2):关闭程序;
  6. View Breakpoints (Ctrl + Shift + F8):查看所有断点;
  7. Mute Breakpoints:哑的断点,选择这个后,所有断点变为灰色,断点失效,按F9则可以直接运行完程序。再次点击,断点变为红色,有效。如果只想使某一个断点失效,可以在断点上右键取消Enabled;
3 智能步入

实现步入同一行的多个方法中某一个方法,在Run-Debugging Actions下可以找到,Smart Step Into(Shift + F7)。

idea android app动态调试 idea debugger调试_java_04


idea android app动态调试 idea debugger调试_java_05

4 断点条件设置

通过设置断点条件,在满足条件时才停在断点处,否则直接运行。

应用意义:遍历一个比较大的集合,在循环内设置了一个断点,如果一次次点击查看变量会很累而且没有意义。

方法:在断点上右键设置当前断点的条件,例如下图设置i==5时断点才生效。

idea android app动态调试 idea debugger调试_计算表达式_06

5 手动修改程序中变量的值

在Debug模式中,可以手动修改程序中变量的值,如下所示:i的值应该是0,手动修改为10,继续执行代码,可以看到控制台输出的就是 10,并且立刻跳出循环。

idea android app动态调试 idea debugger调试_ide_07


idea android app动态调试 idea debugger调试_字段_08


idea android app动态调试 idea debugger调试_计算表达式_09

10
6 计算表达式

计算表达式有两个作用:

  1. 查看表达式(包括方法)的值;
  2. 设置表达式的值(相当于“手动修改程序中变量的值”);

idea android app动态调试 idea debugger调试_java_10


idea android app动态调试 idea debugger调试_ide_11

7 异常断点

在Debug之前,设置异常断点,Debug时如果出现设置包含的异常,断点就会停留在异常出现的地方。

idea android app动态调试 idea debugger调试_intellij-idea_12


idea android app动态调试 idea debugger调试_字段_13


idea android app动态调试 idea debugger调试_intellij-idea_14

8 字段断点(监听这个字段)

1 在字段上打断点:

idea android app动态调试 idea debugger调试_计算表达式_15


2 测试:

idea android app动态调试 idea debugger调试_ide_16


3 停在了构造方法上:

idea android app动态调试 idea debugger调试_字段_17

9 Variables和Watches

“Variables”是用来观察变量的,而“Watches”可以做更加复杂的东西,比如可以观察将变量做一些处理后的结果.

idea android app动态调试 idea debugger调试_intellij-idea_18


在编辑框内编写list.add("鼠"),然后回车确认。

[猫, 狗, 鼠]
10 Stream流

我们暂停在 Stream 的处理代码行时,可以将 Stream 的整个处理流程以图形化界面的形式展示。

idea android app动态调试 idea debugger调试_java_19