在idea的debug中,有很多调试的快捷键,比如F5进入到方法内、F6跳过方法往下执行、F8执行到下一个断点(如果没有下一个断点,则执行到结束)。本文主要介绍F7和Drop Frame的使用,以及它们之间的区别。
1、F7
首先,我们写一段测试代码:
1 public class Main {
2public static void main(String[] args) {
3StringBuilder param = new StringBuilder("123");
4String str = getString(param);
5System.out.println(str);
6}
7
8private static String getString(StringBuilder pa){
9pa.append(34);
10System.out.println(11);
11return "33";
12}
13}
【Idea之debug中F7与Drop Frame的那点事】上面是一段简单的代码,在main()方法内调用了getString()方法,该方法返回一个字符串。下面我们在第10行打一个断点,在debug模式下运行:
文章图片
这时pa的值时“12334”,此时按快捷键F7,得到下面的结果:
文章图片
从上面可以知道,当回退到被调方法后,pa的值也是“12334”。同时从标注看到getString()方法执行结束了,返回了“33”。这时按F6或者F5就不会进入getString()方法内,按F8会打印出“33”。
由此我们可以得出以下结论:
(1)F7的确回退到main()方法
(2)回退之后,原先的变量值不能回退,变量值是执行完调用方法后的值。
(3)回退之后,再按F5也不会进入到getString()方法,因为已经执行完了。
(4)F7等价于F5+F6
2、Drop Frame
该功能也是回退到被调用方法处,但是它和F7有几个很重要的区别。同样,在debug模式下运行,再点击Drop Frame:
文章图片
文章图片
由调试可知,其和F7有以下区别:
(1)回退之后,getString()方法并没有执行完,也没有返回”33”。
(2)回退之后再按F5或者F6,又会进入到getSring()方法体内。
当然也有相同点:
(1)回退之后,如果在getString()方法中修改了实参值,那么F7和Drop Frame都不能还原实参的值。
总结:本文主要介绍,F7和Drop Frame的区别。其中,F7回退之后,调用方法执行完回退。Drop Frame是回退之后,在调用方法当前断点返回,不会执行结束。它们的共同点就是,实参值都不能回退。
彩蛋:现在有个问题,先说问题来源:
首先,F7是执行完调用方法返回,而Drop Frame虽然不执行完调用方法返回,但是按F5或F6还会进入到调用方法内。那如何做到我想结束调用,且不想执行完调用方法,同时按F5或F6也进不到调用方法内呢?
方法:找到frames标签,右键点击正在执行的方法,选择Force Return会让你填写该方法的返回值,如下图:
文章图片
文章图片
点击OK之后,getString()方法会返回“11”,同时也不会往下执行getString()方法。但是,同样Force Return 也不能还原实参值。
推荐阅读
- jar|springboot项目打成jar包和war包,并部署(快速打包部署)
- IntelliJ idea 中使用Git
- idea导入多module
- IDEA 配置Tomcat虚拟目录
- GitHub&Git|Git&GitHUP(五)——————IDEA中Git的使用
- Bug总结|IDEA运行JavaWeb服务器图片无法加载
- Servlet模板修改
- IntelliJ|IntelliJ IDEA 配置Tomcat 服务器
- java|IDEA 配置tomcat图片储存和访问虚拟路径