用于跟踪代码的运行过程。 通常,当程序运行过程中出现异常时,启用该模式可以分析定位异常发生的位置以及运行过程中参数的变化。 通常我们也可以开启跟踪代码运行过程的模式来学习第三方框架的源码。
那么我们来学习一下如何在IDEA中很好的使用它,主要包括以下内容:
一、简介
首先看一下IDEA模式下的界面。
以下是IDEA中启动模式下进入断点后的界面。 我的图标可能与 Mac 上的图标略有不同。 我们简单说一下下图中标注的8个地方:
在模式下启动服务,左侧的按钮在运行模式下启动它。 在开发过程中,我通常直接启动模式,以便随时调试代码。 断点:单击左侧行号栏中的左按钮,或使用快捷键Ctrl+F8设置/取消断点。 断点线的颜色可以自己设置。 窗口:访问请求到达第一个断点后,会自动激活窗口。 如果没有自动激活,可以在设置中进行设置,如图1.2所示。 调试按钮:共有8个按钮。 调试的主要功能就对应这些按钮。 将鼠标悬停在按钮上即可查看对应的快捷键。 同样在菜单栏“运行”中可以找到相应的功能,如图1.4所示。 服务按钮:可以在这里关闭/启动服务、设置断点等。 方法调用栈:线程调试过的所有方法都会显示在这里。 勾选右上角的【显示全部】按钮,其他类库的方法就不会显示出来,否则这里会出现很多方法。 :在变量区域中,可以查看当前断点之前当前方法中的变量。 :查看变量,可以将区域中的变量拖到中间查看
【图1.1】
设置中勾选Show on,请求进入断点后自动激活窗口
【图1.2】
如果您的IDEA底部不显示工具栏或状态栏,您可以在View中将其打开。 显示工具栏对我们来说会很方便。 您可以自己尝试这四种选择。
【图1.3】
运行菜单栏中有调试功能,还可以查看对应的快捷键。
【图1.4】
2. 基本使用及快捷键
调试功能主要对应图1中4、5两组按钮:
1.我们先来说说第一组按钮。 共有8个按钮,从左到右:
【图2.1】
2、第二组按钮共有7个按钮,从上到下依次为:
【图2.2】
,On'',执行更新操作时做什么,一般选择'and',即更新类和资源文件。
例如,通常最好将其与热部署插件一起使用,这样您就不必每次更改代码时都重新启动服务。 如何激活它在最后一节中附有。
下面的On是在IDEA窗口失去焦点时触发的,即当你从idea切换到浏览器时,idea会自动帮你做一些事情。 一般情况下设置为Do即可。 频繁的切换会消耗更多的资源。
[图2.3]
【图2.4】
3. 变量视图
在这个过程中,跟踪查看变量的变化是非常有必要的。 这里简单说一下IDEA中几个可以查看变量的地方。 我相信大多数人都理解他们。
1、如下图,在IDEA中,参数所在行后会显示当前变量的值。
【图3.1】
2. 将光标悬停在参数上,显示当前变量信息。 点击打开详细信息,如图3.3所示。 我一般都是用这个方法,又快又方便。
【图3.2】
【图3.3】
3.查看这里,当前方法中的所有变量都显示出来了。
【图3.4】
4. 在 中,单击新建并输入要查看的变量。 或者您可以从这里拖动来查看。
【图3.5】
如果您发现没有它,则可能是下图所示的位置。
【图3.6】
[图3.7]
4. 计算表达式
计算上述表达式的按钮如图 4.1(Alt + F8)所示。 您可以使用此操作在调试过程中计算表达式的值,而无需打印信息。
【图4.1】
1. 按 Alt + F8 或 按钮,也可以选择表达式然后按 Alt + F8。 将弹出计算表达式的窗口,如下所示。 按 或单击以计算表达式的值。
这个表达式不仅可以是一般变量或参数,也可以是方法。 当在一行代码中调用多个方法时,可以通过这种方式查看某个方法的返回值。
【图4.2】
2. 设置变量。 在计算表达式框中,您可以更改变量的值。 这有时候让我们调试各种值变得非常方便。
【图4.3】
5. 智能介入
想一想,一行代码中有好几个方法,如何只选择一个方法进入。 之前提到过可以使用Step Into(Alt+F7)或Step Into(Alt++F7)进入方法,但这两个操作会按照方法调用顺序依次进入方法,比较麻烦。
那么智能步进就非常方便了。 智能步进可以在Run、Step Into(+F7)中看到,如图5.1
[图5.1]
按+F7,自动定位到当前断点行,并列出要进入的方法,如图5.2所示。 单击方法即可进入该方法。
如果只有一种方法,则直接进入,类似Step Into。
【图5.2】
6.断点条件设置
通过设置断点条件,只有满足条件时程序才在断点处停止,否则直接运行。
通常,当我们在遍历一个大的集合或者数组,并在循环中设置断点时,是不是要一一查看变量的值呢? 那肯定很累,而且你可能会错过这次值得重试的机会。
1、在断点上单击鼠标右键,可以直接设置当前断点的条件,如图6.1所示。 只有当我将其设置为true时,断点才会生效。
[图6.1]
2. 单击查看(Ctrl + + F8)查看所有断点。
Java Line 显示所有断点。 检查右侧设置断点条件。
勾选Log to,将当前断点行输出到控制台,如图6.3
检查并记录执行这行代码时计算表达式的值,并将结果输出到控制台。
[图6.2]
[图6.3]
3.我们来谈谈右边的过滤器。 这些一般不常用,所以让我简单解释一下它们的含义。
:实例过滤,输入实例ID(如图6.5),但是我这里没有成功。 我不知道为什么。 如果您知道,请留言。
: 类过滤,按类名过滤,也失败......
Pass:在循环中使用。 如果断点在循环中,可以设置该值,以便在循环一定次数后在断点处停止。 后续循环将在断点处停止。
【图6.4】
[图6.5]
4、异常断点:通过设置异常断点,当程序中出现需要拦截的异常时,会自动定位到异常行。
如图6.6所示,点击+号添加Java,添加异常断点。 然后进入需要断点的异常类,如图6.7所示,然后就可以看到Java中添加的异常断点了。
我这里添加了异常断点,如图6.8所示。 当发生空指针异常时,自动定位到发生空指针异常的行。
[图6.6]
[图6.7]
[图6.8]
7. 多线程调试
通常,当我们调试时,我们是在一个线程中,一步一步进行。 但有时你会发现,当你在线程中时,无法再发起请求?
那是因为IDEA默认的阻塞级别是ALL,这会阻塞其他线程。 其他线程只有在当前调试线程结束后才会执行。 您可以在View中选择它,如图7.1所示,然后单击Make将其设置为默认选项。
【图7.1】
切换线程。 在图7.2的下拉列表中,可以切换当前线程。 如下所示,我这里有两个线程。 切换到另一个就会进入另一个线程。
【图7.2】
8.回滚断点
调试时,您想重新运行该进程而不发出另一个请求吗?
1、首先我们来了解一下方法调用栈,如图8.1所示。 首先请求方法进入,然后调用方法。 我们暂时忽略其他人。 top方法是当前断点所在的方法。
[图8.1]
2.断点回滚
所谓断点回滚,实际上就是回滚到上一个方法调用的开头。 在IDEA中,测试不能逐行回滚或返回到上一个断点,而是返回到上一个方法。
有两种方法可以回滚。 一种是Drop按钮(图8.2),根据调用的方法逐步回滚,包括第三方库的其他方法(取消Show All按钮会显示第三方库的方法,如图如图 8.3 所示)。
第二种方法是在调用栈方法上选中要回滚的方法,右键选择Drop(图8.4),回滚到该方法的上一个方法调用处,然后按F9( )可以看到程序已进入该方法的断点。
但需要注意一点,断点回滚只能重新运行流程,之前改变过的一些参数/数据的状态无法回滚到之前的状态,比如对象、集合、更新的数据库数据等。
图[8.2]
图[8.3]
图[8.4]
9. 打扰
您想中断请求而不执行剩余流程吗?
有时候,当我们看到传入的参数不正确时,我们就不想再进行后续的流程了。 我们怎样才能中断这个请求(后续进程需要删除数据库数据...)? 是否必须关闭服务并重新启动程序? 嗯,我曾经这样做过。
确切的说,我还没有找到直接中断请求的方法(关闭服务除外),但是可以通过强制返回的方式来避免后续流程,如图9.1所示。
点击,弹出一个窗口。 我的方法的返回类型是Map,所以我这里直接返回强制返回,这样后续的处理就不会进行了。 或者你可以new()。
【图9.1】
【图9.2】
10. 附录:激活
我一直在使用热部署工具,效果还是比较理想的。 修改Java代码或者XML等配置文件都可以进行热更新。 有时候,当服务运行时间较长或者文件变化较多时,热更新不生效,需要重启服务。
这里我就简单说一下我在网上看到的一种免费(非破解)获得永久使用权的方法。 不知道什么时候这个方法就不能用了。
【图10.1】
【图10.2】
【图10.3】
如果有什么不对的地方或者更好的方法,欢迎留言!
Java知识堂,一个原创性高、收藏性高、实用信息多的微信公众号。 让我们一起成长、共同进步。 欢迎关注我们。
作者:bojiangzhou https://www.cnblogs.com/chiangchou