【玩转IDEA】关于debug你可能还不知道的技巧,2024新鲜出炉阿里巴巴面试真题
一、基本操作
首先以Debug模式启动应用,观察一下界面的变化。
Debug调试的基础功能主要对应着以下三点。

1.第一组按钮
共8个按钮,从左到右依次如下:

Show Execution Point (Alt + F10):当您的光标位于其他行或其他页面时,请单击此按钮以将其跳转至当前代码执行的行。
Step Over (F8):步过,一行一行地往下走,如果这一行上有方法不会进入方法。
使用快捷键 F7 输入
Force Step Into (Alt + Shift + F7):通过某种方式强制访问当前窗口中的任意方法,在查看底层源码时可以通过这种方法直接访问官方类库。
Step Out (Shift + F8):退出(或离开)从当前方法内跳转至方法调用处,在此过程中该方法已成功执行完毕(或运行完成),但尚未完成赋值操作(或赋值操作尚未完成)。
Drop Frame (默认无):回退断点,后面章节详细说明。
Navigate to Cursor (Ctrl + N): 用于定位光标位置。你可以将光标移动至你需要查看的那一行, 然后使用此功能, 程序会执行至目标行, 而无需设置断点
Evaluate Expression (Alt + F8):计算表达式,后面章节详细说明。
2.第二组按钮
共7个按钮,从上到下依次如下:

Rerun ‘xxxx’:重新运行程序,会关闭服务后重新启动程序。
Open the 'tech' application and press Ctrl + F5: This action will update the program, typically in response to code changes. The corresponding operation is located within the service configuration settings.
Resume Program (F9):Recovery program, for instance, you have two breakpoints at lines 20 and 25. When running up to line 20 and pressing the F9 key, the execution will advance to the next breakpoint (located at line 25). Pressing F9 again will continue executing until there are no more breakpoints remaining.
Pause Program:暂停程序,启用Debug。目前没发现具体用法。
停止‘xxx’(Ctrl + F2):按下两次以关闭程序。通常会遇到在关闭服务后重新启动时出现端口占用提示的情况……这是因为未能彻底关闭服务导致的……因此建议清除所有JVM进程
View Breakpoints (Ctrl + Shift + F8):查看所有断点,后面章节会涉及到。
静默断点:当选用此选项时(即设置为静默状态),所有原本可执行的断点多变为不可执行状态(即显示为灰色)。此时按下F9键即可直接运行整个程序(即完成整个流程)。再次单击选中的静默断点多变回正常状态(即恢复为红色),恢复其有效性(即能够被激活)。若仅需让某个特定的静默断 point失效,则在该 static break point上右键点击"取消Enabled"功能即可。
3.变量查看
在调试过程中,对变量进行监控追踪至关重要。以下将介绍一些在IDE环境中快速获取变量信息的方法。对于大多数开发者来说这是基本操作。
参数所在行后面会显示当前变量的值。
光标悬停到参数上,显示当前变量信息。
在Variables里查看,这里显示当前方法里的所有变量。
在打开Watches后点击New Watch,在输入框中输入要查看的变量。或者你可以从Variables中拖放到watches中查看这些变量。如果你发现自己没有watches,请检查是否处于正确的位置。

二、大神操作
1.计算表达式
上文提到的相关计算表达式,在此可参考的操作为Evaluate Expression(快捷键Alt + F8)。
可以在调试过程中利用此操作来评估某个特定的表达式,并且无需依赖打印输出信息。

使用Alt + F8 键盘快捷键或点击按钮,在软件界面中打开一个计算器窗口用于计算该表达式
如下,回车或点击Evaluate计算表达式的值。
该表达式不仅可充当普通变量或参数,在你的代码中同时调用了多个方法时即可通过此方式查询某个方法的返回值
在用于计算表达式的地方,允许修改变量的数值**。** 这种情况下有时会给我们提供一个便捷的方式来测试不同的数值设置。

2.智能步入
想想,一行代码里有好几个方法,怎么只选择某一个方法进入。
之前曾提及可采用Step Into(Alt + F7)或者Force Step Into(Alt + Shift + F7)来引导用户进入方法细节。这些快捷方式会按照方法调用顺序依次被触发从而导致操作较为繁琐
这一项功能使用起来非常便捷。Step into即可实现这一操作。通过Run界面轻松查看该功能。Smart Step Into (Shift + F7)
按下Shift + F7键组合后,在屏幕上会自动定位至当前断点行的位置,并为该位置显示所需方法的列表;随后只需单击该方法以深入查看其内部结构即可完成操作

3.回退断点
在调试的时候,想要重新走一下流程而不用再次发起一个请求?
为了方便起见,请您先定位到方法调用栈 区域,在IDEA中进行调试时难以逐一回退至每个断点位置或者恢复到前一个方法调用位置。
需要注意的是,在使用断点回退时只能执行一次流程。当在原有状态发生变化的情况下(如对象、集合或更新数据库数据等),无法恢复到最初的状态。
回退的方式有两种。
一种是采用Drop Frame按钮的方式,在调用时逐步回退,并包含第三方类库中的其他方法;如果取消Show All Frames按钮,则会显示出第三方类库的方法。

- 第二种方式,在调用栈方法上选择要回退的方法。单击右键并选择'Drop Frame'后会返回到该方法之前的一个调用位置。然后按下F9(Resume Program),可以看到程序停在了该断点的位置。

4.中断debug
想要在Debug的时候,中断请求,不要再走剩余的流程了?
有时候遇到传入的参数错误后,并不想继续后续操作。如何终止当前请求呢?(后续操作涉及删除数据库数据等)可能需要采取措施来恢复服务正常运行?嗯,在此之前我也犯过类似错误。
准确地说,在现有的技术条件下,并没有找到一种可以直接中断请求的方式(除了关闭服务之外)。然而可以通过Force Return来实现强制返回以避免后续的操作流程。
于13年毕业于上海交通大学,之前曾在小公司工作过一段时间,并且也曾在华为、OPPO等知名科技公司工作过。自18年起进入阿里巴巴并持续至今。
意识到很多初中级Java工程师希望通过自己的努力来提升专业能力(但这种自学的方式往往缺乏系统性),导致学习效果低下且耗时较长;容易遇到技术瓶颈难以突破!
为了方便起见, 我特意收集整理了一份《2024年最新Java开发全套学习资料》,分享给诸位. 其初衷也非常单纯——旨在帮助那些希望自学提升却不知从何处开始的朋友, 并希望能减轻大家的学习压力.



因为文件较大,仅对部分目录进行截图展示。每个节点内部包含大厂面试题库、学习笔记、源代码教学材料、实战项目以及教学视频。
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)

最后
小编精心为大家准备了一手资料


包含以下Java高级架构相关资料:源代码文档(源码)、学习笔记以及教学视频。涉及的领域包括:Dubbo网络服务框架;Redis数据库;设计模式;Netty服务器;Zookeeper协调算法;Spring Cloud微服务架构;分布式系统以及高并发处理技术。
【附】架构书籍
- BAT面试的20道高频数据库问题解析
- Java面试宝典
- Netty实战
- 算法

BATJ面试要点及Java架构师进阶资料

回忆相关内容: Dubbo, Redis, 设计模式, Netty, Zookeeper, Spring Cloud 等分布式与高并发的技术架构
【附】架构书籍
- BAT面试的20道高频数据库问题解析
- Java面试宝典
- Netty实战
- 算法
[外链图片转存中…(img-AisE3Jmj-1711092810908)]
BATJ面试要点及Java架构师进阶资料
[外链图片转存中…(img-FkNnbZUy-1711092810909)]
一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码
