当前位置: 首页 > news >正文

【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(调试)程序步骤如下

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

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 关键字后指定的多个字段值都相同,才会裱认作是重复记录。 例如&#xff0…...

python从入门到精通:数据容器

数据容器介绍 一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素,可以是任意类型的数据,如字符串、数字、布尔等。 数据容器根据特点的不同,如: 是否支持重复元素 是否可以修改 是否有序&#xff0…...

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&#…...

微信QQ防撤回神器:RevokeMsgPatcher 2.1 终极使用教程

微信QQ防撤回神器:RevokeMsgPatcher 2.1 终极使用教程 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.co…...

从模电理论到商用落地,应届生必做的无线充项目,H 桥 / LC 谐振 + QI 协议全栈详解

很多初学嵌入式的同学、正在准备秋招的电子信息类应届生,都会遇到两个核心困境:一是模电学了 H 桥、LC 谐振,只会背公式做题,根本不知道怎么在真实产品里落地;二是学完单片机只会点灯,写的都是流水账代码&a…...

如何用Mi-Create实现小米穿戴设备表盘个性化设计?

如何用Mi-Create实现小米穿戴设备表盘个性化设计? 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create Mi-Create是一款专为2021年及以后发布的小米穿戴…...

GME-Qwen2-VL-2B自动化测试:基于模型视觉理解的GUI界面测试脚本

GME-Qwen2-VL-2B自动化测试:基于模型视觉理解的GUI界面测试脚本 1. 引言 你有没有遇到过这样的场景?辛辛苦苦写了一套UI自动化测试脚本,结果软件界面稍微改个按钮颜色、挪个位置,整个测试就全挂了。维护成本高得吓人&#xff0c…...

基于pyqt的规则匹配的恶意代码检测系统

当前的恶意代码检测研究中,尽管传统特征匹配(signature-based detection)仍然广泛应用,但面对快速更新且具有混淆、加壳、动态加载、自变异(polymorphism/metamorphism)等能力的新型恶意代码&am…...

管道应力理论(应用)

本文仅对管道应力涉及的理论知识(偏向于应用)进行简单介绍。管道应力:对管道应力校核是为了防止管壁内应力过大对管道造成破坏,不同的荷载引起不同类型的应力,在实际工程应用中,一般分为三种:一…...

突破试用限制:开源脚本实现IDM无限使用的完整解决方案

突破试用限制:开源脚本实现IDM无限使用的完整解决方案 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 一、问题引入:IDM用户的痛点与解决…...

Hugo Coder性能优化技巧:提升网站加载速度的7个方法

Hugo Coder性能优化技巧:提升网站加载速度的7个方法 【免费下载链接】hugo-coder A minimalist blog theme for hugo. 项目地址: https://gitcode.com/gh_mirrors/hu/hugo-coder 如果你正在使用Hugo Coder主题来构建个人博客或开发者网站,那么网站…...

如何永久保存微信聊天记录?这款免费工具让你真正拥有自己的数字记忆

如何永久保存微信聊天记录?这款免费工具让你真正拥有自己的数字记忆 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Tren…...

投资组合优化中的常见陷阱:如何用LINGO和MATLAB避免风险计算错误

投资组合优化中的常见陷阱:如何用LINGO和MATLAB避免风险计算错误 在金融投资领域,优化投资组合是实现收益最大化和风险最小化的关键手段。然而,许多金融分析师和量化投资爱好者在实际操作中常常陷入各种计算陷阱,导致结果偏离预期…...