【java基础】IDEA 的断点调试(Debug)
目录
1.为什么需要 Debug
2.Debug的步骤
2.1添加断点
2.2单步调试工具介绍
2.2.1 Step Over
2.2.2 Step Into
2.2.3 Force Step Into
2.2.4 Step Out
2.2.5 Run To Cursor
2.2.6 Show Execution Poiint
2.2.7 Resume Program
3.多种 Debug 情况介绍
3.1行断点
3.2方法断点
3.2.1样例一
3.2.2样例二
1.为什么需要 Debug
编好的程序在执行过程中如果出现错误,该如何查找并定位错误呢?简单的代码可以直接看出来,但如果代码比较复杂,就需要借助程序调试来查找错误了。
2.Debug的步骤
Debug(调试)程序步骤如下
- 添加断点
- 启动调试
- 单步执行
- 观察变量和执行流程,找到并解决问题
2.1添加断点
源代码文件中,在想要设置断点的代码行的前面的标记行处,单击鼠标左键就可以设置断点,在相同位置再次单击即可取消断点。
2.2单步调试工具介绍
2.2.1 Step Over
每点一次就执行一步(F8)
![]()
2.2.2 Step Into
进入到方法内部(F7)
![]()
2.2.3 Force Step Into
进入源码(Alt + Shift + F8)
![]()
2.2.4 Step Out
跳出当前方法(Shift + F8)
![]()
2.2.5 Run To Cursor
运行至光标所在行(Alt + F9)
![]()
2.2.6 Show Execution Poiint
显示断点所在位置(Alt + F10)
![]()
2.2.7 Resume Program
运行至下一断点 (F9)
![]()
在 Debug 过程当中,可以动态的下断点
3.多种 Debug 情况介绍
3.1行断点
示例代码:
/*** 行断点*/
public class Debug01 {public static void main(String[] args) {int m = 10;int n = 20;System.out.println("交换前:m = " + m + ", n = " + n);swap(m, n);System.out.println("交换后:m = " + m + ", n = " + n);}public static void swap(int m, int n) {int temp = m;m = n;n = temp;}
}
运行结果如下:
我们发现 m 和 n 的值实际上并没有交换,为了探究其原因,我们可以使用行断点进行调试

点击 Debug 后,程序会运行到第一个断点的位置上

此后,每次点击 Step Over 都会向下执行一步
调试到此处,我们选择 Step Into 进入到方法内部,若中途想要跳出当前方法,可以点击 Step Out;若仍点击 Step Over,则会将 swap 方法一次性执行完毕并执行到 main 方法的下一条语句

最后我们可以看到在 swap 方法中 m=20, n=10

但是在 main 方法中仍然 m=10, n=20

如果运行到第一个断点以后,想要直接运行到下一个断点,我们可以点击 Resume Program

3.2方法断点
- 断点设置在方法的签名上,默认当进入时,断点可以被唤醒
- 也可以设置在方法退出时,断点也被唤醒
示例代码:
/*** 方法断点*/
public class Debug02 {public static void main(String[] args) {//1.Son instance = new Son();instance.test();//2.类的多态性Father instance1 = new Son();//3.接口的多态性Consumer con = new ConsumerImpl();con.accept("example");//4.HashMap map = new HashMap();map.put("Tom", 12);map.put("Jerry", 11);map.put("Tony", 20);}
}class Father{public void test() {System.out.println("Father : test1");System.out.println("Father : test2");}
}class Son extends Father{@Overridepublic void test() {System.out.println("Son : test1");System.out.println("Son : test2");}
}interface Consumer{void accept(String str);
}class ConsumerImpl implements Consumer{@Overridepublic void accept(String str) {System.out.println("ConsumerImpl: " + str);}
}
3.2.1样例一
点击 Debug 以后会停留在断点方法的第一行代码的位置

右键断点我们可以勾选此处,此后方法退出时断点也被唤醒

3.2.2样例二
我们在父类打下断点,子类不打断点

运行时,子类明明没有断点,但是也停留了,这叫做方法的重写,子类重写父类的方法,即覆盖

相关文章:
【java基础】IDEA 的断点调试(Debug)
目录 1.为什么需要 Debug 2.Debug的步骤 2.1添加断点 2.2单步调试工具介绍 2.2.1 Step Over 2.2.2 Step Into 2.2.3 Force Step Into 2.2.4 Step Out 2.2.5 Run To Cursor 2.2.6 Show Execution Poiint 2.2.7 Resume Program 3.多种 Debug 情况介绍 3.1行断点 3.2方…...
MPLS相关实验
一、实验拓扑图以及实验要求 1、实验拓扑图 2、实验要求 合理利用IP地址进行分配R3、R4、R5、R6运行ospf在R2、R3、R4、R5、R6上运行MPLSR1上使用静态,R7上运行rip协议,R8上运行ospf协议全网可达 二、实验分析 合理利用IP地址进行分配R3、R4、R5、R6…...
从零开始学习SLAM(五):极几何与极约束
文章参考计算机视觉life 前备知识 概念 几何关系: 上图中: 极平面(Epipolar plane):点c0, c1, p三点确定的平面; 极点(Epipoles): c0 c1 连线与两个平面的交点 基线&a…...
Freertos学习笔记
目录 1.单片机_RTOS_架构的概念 2.系统中的数据类型和编程命名规范 3.堆和栈的概念 4.rtos各个操作系统的优先级 5.1000HZ1ms;1000ms1s。 6.任务状态转换图 7.FreeRTOS任务管理中的Delay函数 8.任务调度算法 9.同步与互斥的概念 10.能实现同步、互斥的各类…...
线程(Thread)的使用方法和锁(同步代码块,lock锁)的问题
多线程: 进程: 正在运行的程序,是系统进行资源分配和调用的独立单位。 每一个进程都有它自己的内存空间和系统资源。 理解:一个正在运行的软件 线程: …...
Java 反射机制
Java 反射(Reflection)是 Java 语言提供的一种在运行时动态获取类信息、创建对象、调用方法、访问属性等功能的机制。它允许程序在运行时对类进行检查、修改和调用,而不需要在编译时就知道类的具体信息。 一、反射的主要类和方法 Class类&…...
详解MBR分区结构以及GPT分区结构
学习笔记: GUID(GPT)分区表详解_gpt分区表-CSDN博客 详解MBR分区结构以及GPT分区结构-CSDN博客 其中U盘作为移动存储设备,可不具备上述分区,也可识别...
jvm 调优篇
一 jvm调优篇 1.1 查看新生代和老年代的比例 输入命令: jinfo -flag NewRatio 17480 1.2 查看新生代,survivor和Eden区比例 1.3 查看jvm调优参数 二 调优参数 2.1 oom异常 通过visual vm查看 2.java dump 大对象 2.2 mat工具进行分析 栈的信息...
Spring AOP应用指南:概念、通知与表达式分析
目录 一.AOP的基础概念 二.Spring AOP的应用场景 三.Spring AOP的核心概念 ▐ 切点(Pointcut) ▐ 连接点(Join Point) ▐ 通知(Advice) ▐ 切面(Aspect) 通知类型 四.PointCut与Order 切面优先级 五.切点表达式 execution(...)表达式 annotation表达式 一.AOP的基…...
汽车的UDS诊断01
UDS(Unified Diagnostic Services):ISO14229中定义了汽车通用诊断协议;ISO15765规定了帧的格式; 1)UDS中的四种帧 UDS中的四种帧:单帧、首帧、流空帧、连续帧 图1 …...
MySQL——单表查询(二)按条件查询(6)DISTINCT 关键字作用于多个字段
DISTINCT 关键字可以作用于多个字段,其语法格式如下所示: SELECT DISTINCT 字段名 1,字段名 2,… FROM 表名; 在上面的语法格式中,只有 DISTINCT 关键字后指定的多个字段值都相同,才会裱认作是重复记录。 例如࿰…...
python从入门到精通:数据容器
数据容器介绍 一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素,可以是任意类型的数据,如字符串、数字、布尔等。 数据容器根据特点的不同,如: 是否支持重复元素 是否可以修改 是否有序࿰…...
Java 中都有哪些引用类型?
Java 中都有哪些引用类型? 强引用 在 Java 中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的。因此强引…...
使用 Dify 和 AI 大模型理解视频内容:Qwen 2 VL 72B
接下来的几篇相关的文章,聊聊使用 Dify 和 AI 大模型理解视频内容。 本篇作为第一篇内容,以昨天出圈的“黑神话悟空制作人采访视频”为例,先来聊聊经常被国外厂商拿来对比的国产模型:千问系列,以及它的内测版。 写在…...
mybatisplus 通过xml 定义接口
在 MyBatis-Plus 中,虽然它极大地简化了 CRUD 操作,提供了许多注解方式(如 Select、Insert、Update、Delete)来直接在 Mapper 接口上定义 SQL 语句,但 MyBatis-Plus 仍然支持传统的 MyBatis 风格的 XML 配置方式来定义…...
上周稼先社区的活动
参天是什么? 最近”参天”很火,不仅MySQL社区,听说Monty最近也跟他们搞了很多活动。其实说起华为的数据库,只有从事数据库行业的人才知道高斯,其他很多人不知道。但是即使从事数据库相关的人,对另外一个产…...
day_45
115. 不同的子序列 class Solution:def numDistinct(self, s: str, t: str) -> int:dp [[0] * (len(t) 1) for _ in range(len(s) 1)]for i in range(len(s)):dp[i][0] 1for j in range(1, len(t)):dp[0][j] 0for i in range(1, len(s) 1):for j in range(1, len(t) …...
SQL 时间盲注 (injection 第十六关)
简介 SQL注入(SQL Injection)是一种常见的网络攻击方式,通过向SQL查询中插入恶意的SQL代码,攻击者可以操控数据库,SQL注入是一种代码注入攻击,其中攻击者将恶意的SQL代码插入到应用程序的输入字段中&#x…...
nginx核心配置示例
1.核心配置示例 基于不同的IP、不同的端口以及不用得域名实现不同的虚拟主机,依赖于核心模块 ngx_http_core_module实现。 1.新建一个 PC web 站点 # 访问测试 [rootnode100 ~]# curl www.root.org # 注意在访问主机中设解析 2.root 与 alias root :指…...
【面向对象】04面向对象三大特征之——继承
文章目录 一、super1.构造方法2.属性3.方法 二、规则三、继承权限 继承 继承是Java中实现代码重用的重要手段之一。使用继承,可以减少代码量,方便修改代码。Java中只支持单根继承,即一个类只能有一个直接父类。 继承使用关键字extends&#…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
