初学者快速上手IDEA Debug功能
IDEA Debug
debug对于一个程序员来说那是不得不会的技能,它的重要性对于调试程序来说不言而喻,举个例子,IDE就像吃饭的碗,而debug就像筷子。为了大家更好的吃饭,今天给大家带来2019版IDEA中的Debug用法
Debug模式的开启
首先在程序代码中加入断点,这里加入断点可以通过点击每行最前面的号码栏
然后就可以点击运行旁边的小绿虫,即可进入代码debug模式
开发中,debug模式运用十分广泛,进入debug模式后我们可以看到debug窗口的界面
Debug模式界面操作
先从图中几个区来介绍常用的模块
服务按钮
从上至下依次是
①Rerun ‘xxxx’(Ctrl+F5),rerun不就是重跑的意思嘛,点这里会关闭服务后再重新启动程序
②Resume Program(F9),恢复程序,比如,你在第20行和25行有两个断点,当前运行至第20行,按F9,则运行到下一个断点(即第25行),再按F9,则运行完整个流程,因为后面已经没有断点了。
③Pause Program,暂停程序,启用Debug,我暂时也没用到过,可能是程序执行时间很长时需要中断debug的情况下使用
④Stop ‘xxx’(Ctrl+F2),关闭程序。
⑤View Breakpoints(Ctrl+shift+F8),查看所有断点,点击以后会弹出断点预览窗口,管理多个断点。
⑥Mute Breakpoints,点击以后所有断点失效,断点符号由红色圆圈变成灰色圆圈,此时会直接运行完程序,在此点击即可恢复断点可用状态。
调试按钮(核心)
① Show Execution Point (Alt + F10):如果你的光标在其它行或其它页面,点击这个按钮可跳转到当前代码执行的行。
② Step Over (F8):步过,一行一行地往下走,如果这一行上有方法不会进入方法。
③ Step Into (F7):步入,如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法。
④ Force Step Into (Alt + Shift + F7):强制步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法。
⑤ Step Out (Shift + F8):步出,从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值。
⑥ Drop Frame (默认无):回退断点,下文介绍。
⑦ Run to Cursor (Alt + F9):运行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。
⑧ Evaluate Expression (Alt + F8):计算表达式,下文介绍。
为了方便展示,这里以我的代码进行调试,我主要是new了一个HashMap,并且往里面存了12个键值对。
变量查看
这里的Variables窗口可以查看当前方法里的所有变量,当然也可以直接在代码块中查看,新版IDEA应该都有这个功能吧。在debug过程中,参数所在的行末尾会浅色显示当前变量运行到这里的值。
若是代码太长没有在行尾显示,则可以直接将光标移动至想要查看的变量,停留即可显示变量信息,这里的加号点一下,就可以在variables模块里多一个监控变量(有的会新开一个窗口叫watches),相当于给这个遍历加了一个”关注“,他的一举一动都会被你发现哦。
如果代码中还有if判断条件的情况,鼠标指向判断条件,也会显示出判断结果,我很常用,可能是懒得想吧
方法调用栈
这里会显示所有该线程调试所经过的方法,勾选右上角倒三角的[Show All Frames],就不再显示其他类库的方法,否则会显示一大堆的方法。
这里可以看到当前debug运行在哪个方法里。
调试步骤
智能步入
这个功能实测在新版idea其实完全不必要,当一行有多个方法系统不知道进入哪个时,已经默认会变色让你选,可以看到每个方法都高亮了,鼠标指向即可进入指定方法。
回退断点
这里的断点回退,就是退到上一个方法调用的开始处,在IDEA里测试没有办法一行一行退回到上一个断点处,只能回到上一个方法,可以看到我这里已经跳进了add12,如果我点回退,则会回退到add11这里。其实这里就相当于退掉了上一次方法调用压栈的信息。
计算表达式
前面提到调试按钮中的最后一个小计算器图标的,Evaluate Expression (Alt + F8) ,他的功能是可以计算调试过程中的某个表达式的值,而不用再打印信息,在使用前先用光标选中表达式,点击’计算器’图标,再点击右下角Evaluate即可计算结果。这个’小计算器’不仅仅会计算一般的表达式,调用了多个方法的表达式的返回值也可以通过它来计算哦。
多线程下调试设置
调试过程在frame的下拉框切换线程即可进入另一个Debug线程。
Debug过程中修改变量值
可以看到这里的a在进入if语句时值为10,如果在实际工程中,我想进判断语句看看能发生什么,总不能去代码里改变量吧,这里可以在variables里对着想要修改的变量右击,单击Set Value即可。
更改前:
更改后:
学会debug以后,查看各种方法的源码都不是事儿啦。
附:(当HashMap首次达到阈值时进入的扩容resize过程)
是不是一目了然?所以这个debug的功能是一定要会的哦