IntelliJ IDEA 之 那些年,我错过的断点

IntelliJ IDEA 之 那些年,我错过的断点


写在前面

在调试过程中,如果没有人为干预的话,程序会按照指定的流程执行下去,但事实上,有些时候我们想违背程序正常的执行过程,还想在调试过程中修改源代码,还想阳光明媚,春暖花开。

题外话

之前调试程序的时候,我总会不小心错过断点,因为有时候设置的断点较多,点着点着(Resume Program:点一下程序就会执行至下一个断点处)就跳过了。这个时候,我总是傻傻的从头再来一遍。


主要内容


+ 演示环境

+ 调用栈帧介绍

+ 返回前一个栈帧

+ 强制退出当前方法

+ 当前帧栈抛出异常

+ 调试期间修改代码

+ 附件和注意


演示环境 ,介绍本次远程调试所依赖的软件环境。


+ IntelliJ IDEA :2018.2.1 (Ultimate Edition) 

+ Windows 10 家庭中文版


 调用栈帧介绍


当程序在断点处阻塞时,可以通过查看程序栈帧 Frames 分析程序的运行过程,线程每一次方法调用都会产生一个栈帧 Frame,Frame 中存有方法执行时的局部变量和方法实参(栈帧可以看成当前线程的调用栈,调用栈中保存了局部变量,实参等数据的快照)。


程序运行栈帧 Frames


返回前一个栈帧


如果你在调试过程中不小心越过了期望调试的代码,没关系,你可以使用(Drop Frame)功能返回到上一个栈帧 Frame,如果还没有返回到你期待的代码处,那么就再返回一次。


Drop Frame:返回至上一个栈帧


强制退出当前方法


如果断点阻塞在方法 A 处,你期望直接返回当前方法,而不需要继续执行该方法其他的内容,那么可以使用 Force Return Current Method。


其中,若 A 方法有返回值,那么你需要提供一个自定义的返回值,若是断点方法存在 try - finally 代码块,那么 Idea 会询问你是否执行 finally 代码块中的内容,对的,这一切都取决于你的诉求。


强制退出当前方法(栈帧)


当前帧栈抛出异常


如果你期望在断点方法抛出异常,观察异常情况下程序的运行情况,那么 Throw Exception 恰好可以满足你的需求。


当前帧抛出异常


调试期间修改代码


如果你在调试代码的时候发现了问题,小改之后期望继续调试,你是否会停掉当前调试会话,选择重新来过呢?Idea 已经为我们考虑到这些麻烦的事情了,HotSwap(热插拔) 机制可以帮助你重新加载修改后的代码,而无需重启调试会话。


调试期间修改代码


修改完代码后,你需要重新编译一下新代码,这样热插播 HotSwap 就可以发现有文件发生改变,Idea 并会提示你是否需要重现加载,选择加载,继续进行调试。


附件和注意


附件和注意,包括上述 Gif 图片中的配置信息和测试代码片段,若有任何未提及到的内容,请联系我。

注意:

调试过程中难免会错过一些精彩的地方,如果你了解如果改变调试流程,那么你好像还有机会折回,否则,只能重新来过咯。


微信公众号


文章内容大多数都是从我的公众号搬过来的,内容可能没有公众号更新的及时,下面是我的公号,欢迎来访。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,160评论 1 32
  • 转载 与调试器共舞 - LLDB 的华尔兹: https://objccn.io/issue-19-2/ 推荐:i...
    F麦子阅读 3,365评论 0 10
  • Android Studio目前已经成为开发Android的主要工具,用熟了可谓相当顺手。作为开发者,调试并发现b...
    涅槃1992阅读 50,901评论 36 366
  • 当年纪八旬,因为疾病而不能吃想吃的香蕉,就像三五岁的小孩子,因为疾病而不能多吃一块儿想吃的饼干……老人与小孩,都很...
    ljx简简单单的的阅读 192评论 0 0
  • "执中无权,犹执一也"。对于非常时期丶非常人物的非常之举,只要是因地制宜,顺势而为,应天顺民,于国于世界大势,于时...
    刘绍发阅读 340评论 2 11