IDEA的断点调试(Debug)

《IDEA破解、配置、使用技巧与实战教程》系列文章目录

第一章 IDEA破解与HelloWorld的实战编写
第二章 IDEA的详细设置
第三章 IDEA的工程与模块管理
第四章 IDEA的常见代码模板的使用
第五章 IDEA中常用的快捷键
第六章 IDEA的断点调试(Debug)
第七章 IDEA创建Java工程、Maven安装与建立工程、Web工程、Tomcat配置
第八章 IDEA关联数据库
第九章 IDEA常用插件_随时更新


文章目录


一、为什么需要Debug

编好的程序在执行过程中如果出现错误,该如何查找或定位错误呢?简单的代码直接就可以看出来,但如果代码比较复杂,就需要借助程序调试来查找错误了。

运行编写好的程序时,可能出现的几种情况:

情况1:没有任何bug,程序执行正确!

如果出现如下的三种情况,都又必要使用debug

情况2:运行以后,出现了错误或异常信息。但是通过日志文件或控制台,显示了异常信息的位置。

情况3:运行以后,得到了结果,但是结果不是我们想要的。

情况4:运行以后,得到了结果,结果大概率是我们想要的。但是多次运行的话,可能会出现不是我们想要的情况。

比如:多线程情况下,处理线程安全问题。

二、Debug的步骤

Debug(调试)程序步骤如下:

  1. 添加断点
  2. 启动调试
  3. 单步执行
  4. 观察变量和执行流程,找到并解决问题

1、添加断点

在源代码文件中,在想要设置断点的代码行的前面的标记行处,单击鼠标左键就可以设置断点,在相同位置再次单击即可取消断点。

2、启动调试

IDEA提供多种方式来启动程序(Launch)的调试,分别是通过菜单(Run --> Debug)、图标("绿色臭虫")等等。

3、单步调试工具介绍

1、调试器

在此界面可查看关于调式获得到的信息,如变量、方法返回值等

2、控制台

点击控制台后可以跟我们正常运行代码一样,在控制台中输入数据和查看输出情况

3、重启

重新调试

4、停止

停止当前调试

5、Resume Program

快捷键为 F8 ,跳到一下个断点处

6、Step Over

快捷键为 F6 。步过,一行一行地往下走,如果这一行上有方法,直接执行完该方法的内容,不会进入方法里面。

7、Step Into

快捷键为 F5 。步入,如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法。

8、Step Out

快捷键为 F7 。步出,从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值。

9、Force Step Into

快捷键为 Alt + Shift + F7 。强制步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法。

10、Run to Cursor
Ctrl+R 。运行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。

11、Show Execution Point

快捷键为 Alt + F10 。如果你的光标在其它行或其它页面,点击这个按钮可跳转到当前Debug代码执行的行。

12、Variable窗口

如下图中的红框,这里显示当前方法里的所有变量。

13、View Breakpoints(Ctrl + Shift + F8):查看所有断点

14、Mute Breakpoints:使得当前代码后面所有的断点失效, 一下执行到底

说明:在Debug过程中,可以动态的下断点。

三、多种Debug情况介绍

1、 行断点

断点打在代码所在的行上。执行到此行时,会停下来。

2、方法断点

断点设置在方法的签名上,默认当进入时,断点可以被唤醒。也可以设置在方法退出时,断点也被唤醒。如下图所示。

在多态的场景下,在父类或接口的方法上打断点,会自动调入到子类或实现类的方法

3、字段断点

在类的属性声明上打断点,默认对属性的修改操作进行监控。

.4、条件断点

如下图所示,在满足arri % 3 == 0的条件下,执行断点。

5、异常断点

通过下图的方式,对指定的异常进行监控:

6、线程调试

7、强制结束

如上图所示,比如我们进入到一个方法,是用来插入数据到数据库中,一共四行代码,但是到了第二行就已经错误了,我们不想让他继续错下去了,但是还想让这个方法之后的代码稍后继续运行,那我们就让目前的方法强制结束(返回)。

四、自定义调试数据视图


五、常见问题

问题:使用Step Into时,会出现无法进入源码的情况。如何解决?

方案1:使用 force step into 即可

方案2:点击Setting -> Build,Execution,Deployment -> Debugger -> Stepping把Do not step into the classess中的java.* 、javax.* 取消勾选即可。如下图所示。

相关推荐
小蒜学长1 小时前
微信小程序-高校自习室管理系统(代码+数据库+LW)
java·spring boot·后端·微信小程序·自习室管理
鸥梨菌Honevid1 小时前
UVM 中 REQ 和 RSP 类型详解:从通信模型到 item_done 与 put_response
java·前端·servlet
mmsx1 小时前
Android 插件化架构:40 个 Gradle 模块的拆分、通信与共存
android·kotlin
mmsx1 小时前
Android 不改一行源码:用 AspectJ 做三类拦截
android·kotlin
TST-魚爷2 小时前
易视讯会议摄像头 + 全向麦克风实操讲解稿
android·电脑·钉钉·腾讯会议·zoom会议
瑞克-桑切斯2 小时前
真实企业场景 运维安全与管理
java·网络·github
老板一杯拿铁2 小时前
Java 八股文面试详解:从基础到进阶的全面梳理
java·面试
嘟哩DuliDuli2 小时前
AI创作工作区的项目上下文与多模态任务边界
android·人工智能·安全·ai·软件工程
const_qiu2 小时前
第 2.5 章 2.5.4-2.5.5:JWT 双 Token 与声明式权限守卫
java·人工智能
bug菌2 小时前
一个周末就想把短链服务推到 10 万 QPS,真能靠加 Redis 做到吗?
java·redis·go