Debug
用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常所发生的位置,以及在运行过程中参数的变化。
Debug界面
以下为IDEA2022.1.3版本界面:
图解说明:
- Debug模式启动 方便随时调试代码
- 设置断点 在代码行号处单击左键,或快捷键【Ctrl+F8】在鼠标焦点行设置/取消断点
- Debug窗口 请求到达第一个断点后,激活Debug窗口
- 调试按钮 Debug模式过程中调式操作,总共有8个按钮,鼠标悬停在按钮上可查看对应的快捷键
- 服务按钮 快捷操作,可查看所有断点,禁用断点等
- 方法调用栈 显示调试过程中线程经过的调用,勾选【Show All Frames】不会显示其他类库的方法
- 变量区 可查看当前方法当前断点前的所有变量
- 监视区 查看变量,可将变量区的变量拖到监视区查看
基本用法
服务按钮
服务按钮从上到下依次说明:
- Rerun ‘xxx’ 关闭程序重新运行。快捷键【Ctrl+F5】
- Modify Run configuration 修改运行时配置信息
- Resume Program 恢复程序,即调到下一处断点,没有断点则结束整个流程。快捷键【F9】
- Pause Program 暂停程序
- Stop ‘xxx’ 关闭程序。快捷键【Ctrl+F2】
- View Breakpoints 查看所有断点。快捷键【Ctrl+Shift+F8】
- Mure Breakpints 取消或重设断点
功能按钮
功能按钮从左往右依次说明:
- Show Execution Point 光标重新定位到当前断点处。快捷键【Alt+F10】
- Step Over 当前方法内一行一行往下走,不会进入到行中方法内容。快捷键【F8】
- Step Into 当前方法内一行一行往下走,遇到行中方法就进入该方法内部,但不会进入官方库方法内。快捷键【F7】
- Force Step Into 当前方法内一行一行往下走,遇到行中方法就进入该方法内部,包括官方库方法内。快捷键【Alt+Shift+F7】
- Step Out 从步入的方法内退出到该方法调用处,此时方法已执行完毕,只是没有赋值。快捷键【Shift+F8】
- Run to Cursor 运行到光标处,此时不需要打断点。快捷键【Alt+F9】
- Evaluate Expression 计算表达式。快捷键【Alt+F8】
Trace current Stream chain Stream 跟踪调试窗口
变量查看
- 在IDEA中,参数所在的行后面会显示变量的值
- 光标悬停到参数上,显示当前变量信息
- 在变量区里查看,显示当前方法中当前断点前所有变量的信息
- 在监视区中查看变量数据(可直接从变量区拖变脸到监视区)
查看所有断点
点击【服务按钮】中的View Breakpoints可查所有断点。快捷键【Ctrl+Shift+F8】
断点分类
- Java Line Breakpoints
- Java Exception Breakpoints
- JavaScript Exception Breakpoints
条件断点
选择断点所在行,在断点图标右键勾选Condition或在【Breakpoints】窗口中勾选Condition,然后输入框中输出条件参数。Debug模式启动程序后,断点在参数条件成立的时候成立。
打印堆栈信息
在【Breakpoints】窗口中的log中选中Breakpoint hit message(断点触发信息)和Stack trace(堆栈信息),可以看到方法中的具体调用堆栈信息。
添加日志打印
在【Breakpoints】窗口中的选中Evaluate and log,然后在下面输入框中输入待打印的日志。
异常断点设置
在【Breakpoints】窗口的左上角,点击【+】,选择Java Exception Breakpoints。在弹出框中输入要断点的异常类。
例:添加一个空指针异常断点后,程序出现空指针异常后,自动定位到空指针异常行
表达式解析
点击【功能按钮】上的Evaluate Expression,填写表达式,双击或点击【evaluate】可计算结果。通常是条件判断分支后可实时解析出程序最终走哪个分支。
智能步入
一行代码中有多个方法,如何仅选择某一个方法进入。Step Into或Force Step Into进入到方法按照顺序依次执行。智能步入(Smart Step Into
)则可选择方法进入。快捷键【Shift+F7】
中断Debug
中断Debug即中断请求,不再走后续剩余流程(强制返回方法返回值避免后续的流程)。中断Debug不需要关闭服务重新启动程序。
回退Debug
调试时,不用重新发起新的请求而直接重走流程。其实就是回退到上一个方法调用的开始处。
回退的方式有两种:
- Drop Frame 按调用的方法逐步回退,包括第三方类库里的方法
- 调用栈方法上选择要回退的方法 右键选择Drop Frame,回退到该方法的上一个方法调用处,再按【F9】即可进入方法断点处。
参考博客:IDEA的高级Debug技巧
参考视频:IDEA 断点调试高级玩法