文章目录
基础篇:
一、行断点
二、详细断点(源断点)
打出源断点的方法:按住shift + 左键可以打出源断点
1.已启用(enable)
2.挂起(suspend):这个如果勾选的话,你会发现这个断点的颜色就会变成红色,和行断点的颜色相同。
suspend中有两个选项,一个是all,一个是Thread。前者勾选之后表示只要运行到这个地方就会停。后者是在多线程调试的时候使用的。表示只有在当前线程的时候会停,别的线程不会停。
3.条件(condition):这个是高阶停止条件,诸如满足if啥啥条件时才会停,这个就是高阶的调试时会用到。
在程序运行完后,图中所示的位置会打印出经过断点的位置,在哪一行被触发的,具体的一个类,以及所在方法的详细签名都会显示出来。
三、方法断点
在方法的那一行上打上断点,就是方法断点
在方法断点的调试的时候,会分别在该方法的前后停住。
四、异常断点
异常断点需要自行配置,配置完了之后当程序运行到出现某个配置好的异常的时候就会停下来。
经过这几步即可完成异常断点的设置。
五、字段断点
检测整个生命周期值的变化
你会惊奇的发现,每个字段对应的值都会给你标上去,而且你需要特殊监控的字段会单独标注出来。
进阶篇
一、条件表达式
打上行断点之后,鼠标右击断点,即可对断点进行编辑,给断点添上条件
当i是偶数的时候停顿。
二、通过调试来打印堆栈信息
这两个勾选上之后就可以打印堆栈信息了。
三、可以通过调试来解析表达式
点击这个长得像计算机一样的按钮,就会出来evaluat面板。
点击评估按钮,就可以出来表达式解析的内容,可以很方便地查看各种你想查看的信息,这个功能简直强的离谱。
四、避免操作资源drop frames
在这里打上断点,模拟在此处遇到了事务操作的问题。
很好现在很难受的时候发生了,我们现在要做的就是将程序停下来,防止将错误的数据存到数据库中。正常人第一反应就是点击图中的红色方块,将程序强制停止下来,这样就不会把错误的数据存到数据库中了吧。那么事实是这样吗?让我们看看点击之后的效果。
很遗憾,更加shit的事情发生了。我们以为程序停止了,实际上并没有完全停止。tnn的还是把后面的语句都执行完了啊,错误的信息还是存到数据库中去了。
江湖上流传着一个解决方法,点击下图中的这个按钮,丢弃当前帧(drop frame)。
然而这么做实际的效果是:
回到了这个方法开始执行的时候,也就是进入该方法前的位置。
我们点击步入,又回到了这个位置,进行了无限的套娃操作。
然而真正的解决方法应该是。。。。。。。拔电源,没错,这样就不会又任何的问题了。
回到正题,真正的解决方法如下:
首先进入帧(frames)面板,找到对应的运行的位置,右键弹出选择框。
然后选择force return
然后看控制台发现后面的内容确实没有执行,控制台没有任何的输出。
五、常用按键功能介绍
1.显示执行点(show execution point):点击之后鼠标光标可以直接回到断点所在的位置。
2.步过(step over):不管当前行会不会调用其他的方法,或者是跳到其他地方去都不会管,直接执行完当前行跳到下一行代码。
3.步入(step in)和步出(step out):这个好理解就是执行下一步,回到上一步。
4.强制步入(force step into):点击之后,强制进入方法的内部查看。
5.运行到光标处(run to cursor):点击之后,可以直接运行到光标所在的位置,在这之间不会有任何停顿。
六、调试源码
在方法开始的地方打一个断点,然后在需要查看的方法的源码中也打上一个断点。
七、stream调试
在这三行的任意一个位置都是可以打断点的,并且在给stream打断点的时候会有特殊选项。
选好后,开始运行程序,我们发现程序中没有任何的数据显示和输出。
但是在像计算机按钮的旁边出现了一个按钮。
Trace Current Stream Chain(跟踪当前流链)
点击之后的效果简直裂开。
还可以选择扁平模式,看得更加直观。