在idea的这个界面就是Debug界面,可以通过Alt+5快捷键进入
先介绍一下这几个按钮的作用
第一个按钮——显示执行点(Show Execution Point)
作用是跳到当前DeBug的位置,无论你在哪个界面。
——————————————————分割线——————————————————————
第二个按钮——跨过(Step Over)
按钮会逐行执行代码,不过遇到方法不会进入直接执行下一行。
——————————————————分割线——————————————————————
第三个按钮——跨入(Step Into)
逐行执行代码,不过遇到非Java类库的方法会进入方法体中执行。
——————————————————分割线——————————————————————
第四个按钮——强行跨入(Force Step Into)
逐行执行代码,不过会进入所有的方法体中执行。
——————————————————分割线——————————————————————
第五个按钮——步出(Step Out)
之前三个都可以理解位是步入,这里是步出,每次点击会回到上次调用的地方的结束。
——————————————————分割线——————————————————————
第五个按钮——回退到上一步(Drop Frame)
此按钮比较复杂,简单的说是退出当前的方法,然后回到上一步的开始,此时你点击进入下一步会重复执行
此代码答应的过程是这样的,第一行test01()为18行输出,第二行1为19行输出,此时在20行的位置,如果在这里点击Drop Frame按钮,会回到第11行,再次点击 Step Into 步入按钮会再次进入第18行,输出第三行的test01(),然后第19行代码输出第四行的1,第20行会执行修改值,进入第21行代码——return,此时点击Drop Frame按钮,又会会回到第11行,点击 Step Into进入18行,输出第五行的“test01()”,进入19行输出的结果是控制台第六行的2。
这里红色的文字为控制台的行数,橙色的文字是代码的行数。
此结果可以说明,Drop Frame按钮只会把DeBug的一个执行顺序发生改变,但是具体的值不会因为退回而退回,修改了就是修改了!!!
——————————————————分割线——————————————————————
第六个按钮——运行到光标处(Run to Cursor)
就是字面意思的运行代码到光标所在位置。
——————————————————分割线——————————————————————
第七个按钮——求值表达式(Evaluate Expression)
会弹出Evaluate窗口,该窗口可以输入你程序中的一个方法,然后根据你传入的值直接返回出一个结果。
比如这样:
你甚至可以这样:
获取当前这个对象的值作为参数传入,无论这个方法你是否调用过。
——————————————————分割线——————————————————————
第八个按钮——跟踪当前流链( Trace Current Stream Chain)
最后这个按钮是用于Java1.8新特性的Stream流的一个可视化界面,有了它你可以更清楚的看出流的走向。
竖排的按钮比较好理解
第一个是重新启动在这个项目。
第二个是将当前debug位置进入到下一个断点处。
第三个是暂停。
第四个是终止服务。
第五个会弹出断点界面。
第六个是忽略所有的断点(就当没打过)。
——————————————————分割线——————————————————————
这里有三个下拉框,第一个是展示所有的断点信息。
第二个和第三个分别是遇到Java Exception和JavaScript Exception是会自动增加断点,这个功能非常好用,使用方法为在左上角的+号按钮点击
选择Java Exception
可以找到你需要添加的Exception信息,也可以是自定的异常。新增后
进行勾选,当你出现这个异常的时候就会自动断点了,你也可以勾选Any Exception发生任何异常都会自动断点。
——————————————————分割线——————————————————————
任意的断点都可以点击右键
可以选择是线程模式还是所有的。
如果你的这段debug代码中存在多线程的情况,你可以在
DeBug的这个界面选择当前线程位置,确保优先执行某个线程的代码。
后面的这个Condition是条件,比如你一个多层循环想要当i=固定值,的情况下才进入断点就可以在这里输入i=你要的值。确保在指定情况下进入断点。
——————————————————分割线——————————————————————
此处Variables 变量区 可以看到变量演变 ,你可以通过加号按钮,添加你要观察的变量,也可以是这个变量的一个属性
你可以通过右键这里
set value修改它的值,这个修改只作用在本次debug中,下次重新debug还是会按代码逻辑进行。
好,我说完了。