Debug 调试相关

1. 各功能结构图

在这里插入图片描述
简单说一下,部分内容
3. Debug 窗口:访问请求到达第一个断点后,会自动激活Debug窗口;
4. 调试按钮:一共有8个按钮,调试的主要功能就对应着这几个按钮,鼠标悬停在按钮上可以查看对应的快捷键
5. 服务按钮:可以在这里关闭/启动服务,设置断点等。
6. 方法调用栈:这里显示了该线程调试所经过的所有方法,勾选右上角的[Show All Frames]按钮,就不会显示其他类库的方法了,否则这里会有一大堆的方法。
7. Variables:在变量区可以查看当前断点之前的当前方法内的变量。
8. Watches: 查看变量,可以将Variables区中的变量拖到Watches中查看;

2.基本用法&快捷键

Debug调试的功能主要对应着是图一中4和5两组按钮:
第一组按钮
在这里插入图片描述
有7个按钮

  1. Step Over(F8): 一行一行地往下走,如果这一行有方法不会进入方法。
  2. Step Into (F7): 如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法;如HashMap的put()
  3. (Alt + Shift + F7):强行步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法。
  4. Shift + F8: 步出,从步入的方法内退出到方法调用处,此时,方法已执行完毕,只是还没有完成赋值。
  5. Drop Frame : 回退断点,后面章节详细说明。
  6. (Alt + F9):运行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。
  7. Alt + F8 :计算表达式,后面章节详细说明
    **第二组按钮 **
    共七个按钮,从上到下依次如下:
    在这里插入图片描述
    第一个:Ctrl + F5 更新程序
    第二个: F9 恢复程序,比如说:你在第20行和第25行有两个断点,当前运行至20行,按F9,则运行到下一个断点(即第25行),再按F9,则运行完整个流程,因为后面已经没有断点了。
    第三个:Pause Program 暂停程序,启动Debug,感觉用处不大
    第四个:Stop xxx 关闭程序
    第五个:Ctrl + Shift + F8 查看所有断点
    第六个:哑的断点,选择这个后,所有的断点变为灰色,断点失效,按F9则可以直接运行完程序。再次点击,断点变红色,有效。如果只想使某一个断点失效,可以在断点上右键取消Enabled,则该断点失效。
    热部署插件,如JRebel,这样就不用每次修改代码后还要去重新启动服务器

3.变量查看

1. 在IDEA中,参数所在行后面会显示当前变量的值
在这里插入图片描述
2.光标悬停到参数上,显示当前变量信息
在这里插入图片描述
3.点击+,就可以查看到当前变量的详细信息
在这里插入图片描述
4. 计算表达式
在这里插入图片描述
点击这个按钮;
这个按钮不仅可以是一般变量或参数,也可以是方法,当你的一行代码中调用了几个方法时,就可以通过这种方法查看某个方法的返回值
这是我的一个测试类
在这里插入图片描述
我调用sum(100)时,这边显示求和结果为110;符合预期;
在这里插入图片描述
同时,可以设置变量,在计算表达式的框里,可以改变变量的值看,这样有时候就能很方便我们去调试各种值的情况了;不需要sout输出了;
在这里插入图片描述
如上图,就是把num 从100改成了200;

5.智能步入

如果,一行代码中有好几个方法,怎么只选择某一个方法进入。之前提到过使用Step Into 或者 Force Step Into进入到方法内部,但这两个操作会根据方法调用顺序依次进入,这比较麻烦。

那么智能步入就很方便了,智能步入,选好断点行,然后调试
在这里插入图片描述
想进那个方法进那个方法

6.断点条件设置

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

通常,当我们在遍历一个比较大的集合或者数组时,在循环内设置一个断点,如果我们一个一个去看变量的值,那肯定很累,说不定你还错过这个值得重新再来一次。
1. 在断点上右键直接设置当前断点的条件,我设置值为3的时候停止;
在这里插入图片描述
这时候,等到nums[i] == 3时,才会停止;

7.多线程调试

由于IDEA在Debug时,默认阻塞级别是ALL,会阻塞其他线程,只有在当前调试线程走完时,才会走其他线程。可以在View Breakpoints里选择Thread,将其设置为默认选项;
在这里插入图片描述

点击Make Default设置为默认选项;
在这里插入图片描述
这个时候,就可以切换当前线程,如下我这里有两个Debug的线程,切换另一个则进入另一个Debug的线程;
在这里插入图片描述

8.回退断点

在调试的时候,想要重新走一下流程,而不用再次发送一个请求?
所谓的回退断点,其实就是回退到上一个方法调用的开始处;在IDEA里测试无法一行一行地回退会回到上一个断点处,而是回到上一个方法。
回退按钮 (Drop Frame)
在这里插入图片描述
测试:
在这里插入图片描述
在19行进行回退,会回退到14行;method()方法上;
在33行回退,会回退到19行
在这里插入图片描述
但是,有一点需要注意,断点回退只能重新走一下流程,之前,某些参数改变了的话,是无法回退到之前的状态的,如对象、集合、更新了的数据库等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值