IntelliJ IDEA 之 那些年,我错过的断点
写在前面
在调试过程中,如果没有人为干预的话,程序会按照指定的流程执行下去,但事实上,有些时候我们想违背程序正常的执行过程,还想在调试过程中修改源代码,还想阳光明媚,春暖花开。
题外话
之前调试程序的时候,我总会不小心错过断点,因为有时候设置的断点较多,点着点着(Resume Program:点一下程序就会执行至下一个断点处)就跳过了。这个时候,我总是傻傻的从头再来一遍。
主要内容
+ 演示环境
+ 调用栈帧介绍
+ 返回前一个栈帧
+ 强制退出当前方法
+ 当前帧栈抛出异常
+ 调试期间修改代码
+ 附件和注意
演示环境 ,介绍本次远程调试所依赖的软件环境。
+ IntelliJ IDEA :2018.2.1 (Ultimate Edition)
+ Windows 10 家庭中文版
调用栈帧介绍
当程序在断点处阻塞时,可以通过查看程序栈帧 Frames 分析程序的运行过程,线程每一次方法调用都会产生一个栈帧 Frame,Frame 中存有方法执行时的局部变量和方法实参(栈帧可以看成当前线程的调用栈,调用栈中保存了局部变量,实参等数据的快照)。
返回前一个栈帧
如果你在调试过程中不小心越过了期望调试的代码,没关系,你可以使用(Drop Frame)功能返回到上一个栈帧 Frame,如果还没有返回到你期待的代码处,那么就再返回一次。
强制退出当前方法
如果断点阻塞在方法 A 处,你期望直接返回当前方法,而不需要继续执行该方法其他的内容,那么可以使用 Force Return Current Method。
其中,若 A 方法有返回值,那么你需要提供一个自定义的返回值,若是断点方法存在 try - finally 代码块,那么 Idea 会询问你是否执行 finally 代码块中的内容,对的,这一切都取决于你的诉求。
当前帧栈抛出异常
如果你期望在断点方法抛出异常,观察异常情况下程序的运行情况,那么 Throw Exception 恰好可以满足你的需求。
调试期间修改代码
如果你在调试代码的时候发现了问题,小改之后期望继续调试,你是否会停掉当前调试会话,选择重新来过呢?Idea 已经为我们考虑到这些麻烦的事情了,HotSwap(热插拔) 机制可以帮助你重新加载修改后的代码,而无需重启调试会话。
修改完代码后,你需要重新编译一下新代码,这样热插播 HotSwap 就可以发现有文件发生改变,Idea 并会提示你是否需要重现加载,选择加载,继续进行调试。
附件和注意
附件和注意,包括上述 Gif 图片中的配置信息和测试代码片段,若有任何未提及到的内容,请联系我。
注意:
调试过程中难免会错过一些精彩的地方,如果你了解如果改变调试流程,那么你好像还有机会折回,否则,只能重新来过咯。
微信公众号
文章内容大多数都是从我的公众号搬过来的,内容可能没有公众号更新的及时,下面是我的公号,欢迎来访。