IDEA下java程序的调试(简易实例图示版)
在线排版不太好看,介意的读者可下载word下来看:https://download.csdn.net/download/xijinno1/87441301
IDEA下java程序的简单调试-System.out.println
首先本次进行调试的一个程序是实现从1累加到100的功能,是在IDEA下进行编写的。如图所示:
public class Demo {public static void main(String[] args) {int i; //用于做临时变量int sum = 0; //用于存放累加的结果for (i = 1; i <= 100; i++) {sum += i;//每次循环进行的累加
// System.out.println("第“+i+”次循环,sum的值为 " + sum); // 输出}System.out.println("从1加到100的结果是:" + sum); // 输出}
}
将其运行之后得到的结果如图所示:

把
// System.out.println("第“+i+”次循环,sum的值为 " + sum); // 输出
语句取消掉注释之后再运行一次得到的结果如图所示:

这里由于输出结果太多,所以只截取到了一部分。不过可以看到,在加了这个循环中的输出语句之后,就可以清楚的看到每次循环所经历的一个过程,所得到的结果。
当然不仅只能这样来进行观察程序的运行,我们可以使用IDEA的Debug功能。在编程的时候使用Debug有很多的好处,比如说能够跟踪变量,可以看到变量值的变化。或者是能够迅速的找到程序中所出现的错误。
这种调试的方式能看到的信息比较少,操作也相对较多,下面叙述一下用断点的方式进行调试。
IDEA下java程序的简单调试-Debug
实例程序还是如下程序(实现从1累加到100):
public class Demo {public static void main(String[] args) {int i; //用于做临时变量int sum = 0; //用于存放累加的结果for (i = 1; i <= 100; i++) {sum += i;//每次循环进行的累加
// System.out.println("第“+i+”次循环,sum的值为 " + sum); // 输出}System.out.println("从1加到100的结果是:" + sum); // 输出}
}
首先要设置断点
(方法:在一个有效的代码行左边的空白处,行号后面,如下图红框处点击),设置成功后如图所示:

断点表示当手动Debug来运行程序时,程序会在断点之前停止运行。
启动Debug
手动Debug有如下几种
方法1:
快捷键shift+F9
方法2:
点击如下图的图标

或者,在下方找到调试窗口后选择调试图标,如下图

方法3:
菜单栏依次点击 运行 -> 调试 ...,如下图

启动Debug之后会出现一个Debug的调试窗口,如图所示:

注意:有时候可能会碰到点击调试按钮但是当前调试界面却并不是想要调试的文件的情况,你需要把当前的执行窗口切换过来:

或者直接在要调试的文件左侧点击调试,操作如下图:

一些调试按钮和快捷键
当点击

(快捷键是F7)的时候会执行代码的下一行,如下图所示:

右边显示的sum=0就是我们点击

(快捷键是F7)就能得到的下一行代码执行的内容,右边这个方框也就是变量值的显示区域。同时代码行的右边也能够看到变量的值,这里sum的初始值为0,如下图所示:

再次点击

(快捷键是F7),进入到循环中,i的初始值为1,如图所示:

再点击一次

(快捷键是F7)就能够得到第一次循环后sum的值为1,如图所示:

代码行处也是显示了变量的值,如图所示:

值得一提的是,每运行到一行程序时代码行都会有这种与其他代码行不同颜色的提示。同时main后面的数字也是告诉我们执行到哪一行。如图所示:

这里就是表示执行到main方法得第5行。
左下红色框所在位置显示的是当前压栈的方法,跟栈区运行一样,先进后出,最先压栈的在最下面,最上面的最后压栈,也就是最后一次加载进栈区的方法,而方法名前面显示的数字就是当前调试进度所在的行数。
而如果要直接运行完整个程序就可以点击左边的

(快捷键是F9),就可以得到运行后的结果,结果是在

(中文版

) 里面进行查看。如果想要重新Debug,是点击

(快捷键是Ctrl+F5)。当然要结束Debug,可以点击

(快捷键是ctrl+F2)。 如图所示:

按下F9得到运行得结果,在Console(控制台)中查看,如图所示:

接下来对程序进一步的改进,将循环体放入到一个方法中,整个代码如下:
public class Demo {public static void main(String[] args) {sum(); // 调用方法}// 定义一个名为sum的方法public static void sum() {int i; //用于做临时变量int sum = 0; //用于存放累加的结果for (i = 1; i <= 100; i++) {sum += i;//每次循环进行的累加System.out.println("第“+i+”次循环,sum的值为 " + sum); // 输出}System.out.println("从1加到100的结果是:" + sum); // 输出}
}
将上述代码放入idea中,同时在第3行打一个断点,结果如图所示:

手动启动Debug后,会出现下图现象(代码运行到main方法的第3行停住):

这个时候如果点击

(快捷键是F8),就会直接往下运行,因为

(快捷键是F8)表示的是步过,就是直接往下走,如果这一行上有方法不会进入到方法体当中,如下图所示:

点击一次

(快捷键是F8)后,直接跳过方法运行到第4行,并且能够直接从Console(控制台)中看到方法运行的结果,如下图所示:

点击第二次

(快捷键是F8) 后,直接结束,如下图所示;

而如果使用的是

(快捷键F7)就能够进入到方法内部,因为

(快捷键F7)表示的是步入,如果当前行有方法就能够直接进入到方法内部,不过只能进入到自行定义的方法中,不能进入到官方类库中的方法。如下图所示:

可以看到左下角的Debug框中也表示了进入到sum方法,运行到第9行。接下来继续点击

(快捷键F7)就和前面所讲的一样,反复进行循环,循环结束后,就得到运行结果,程序结束。
而如果在运行到方法中,想要跳出方法,直接将方法运行结束,就要点击

(快捷键shift+F8),如下图所示:


(快捷键shift+F8)表示的是步出,就是从方法内部回到方法的调用处,如图所示(在方法体内点击

(快捷键shift+F8)之后就直接跳到了第4行 ):

小结
当在对java程序进行调试的时候,如果不要进入方法中查看,就可以直接使用

(快捷键是F8)步过进行查看。如果要进入方法中查看,就需要使用

(快捷键是F7)步入进行查看。在方法之中想要退出到方法调用处需要使用

(快捷键是shift+F8)步出。
还有一个按钮是

(快捷键是Alt+F9),作用是debug时使程序到达光标所在的地方,注意,要程序可以到达的地方,否则程序不会停止在光标处。



(快捷键是shift+F9): 启动Debug

(快捷键是Ctrl+F5):重新Debug

(快捷键是F9):直接运行完整个程序,

(快捷键是ctrl+F2) :结束Debug

(无快捷键) ,本文未实例演示:调试程序时,暂停程序运行

(快捷键是ctrl+shift+F8) ,本文未实例演示:查看程序中的断点

(无快捷键) ,本文未实例演示:屏蔽所有断点,即debug时,即使有断点,程序也不会命中断点。


(快捷键是F8):表示的是步过,直接往下走,如果这一行上有方法不会进入到方法体当中

(快捷键是F7): 执行代码的下一行,如果这一行上有方法会进入到方法体当中

(快捷键shift+F8):表示的是步出,从方法内部回到方法的调用处

(快捷键是Alt+F9):作用是debug时使程序到达光标所在的地方
相关文章:

IDEA下java程序的调试(简易实例图示版)
在线排版不太好看,介意的读者可下载word下来看:https://download.csdn.net/download/xijinno1/87441301IDEA下java程序的简单调试-System.out.println首先本次进行调试的一个程序是实现从1累加到100的功能,是在IDEA下进行编写的。如图所示&am…...

动态规划算法
1.应用场景-背包问题 背包问题:有一个背包,容量为 4 磅 , 现有如下物品 要求达到的目标为装入的背包的总价值最大,并且重量不超出要求装入的物品不能重复 2.动态规划算法介绍 动态规划(Dynamic Programming)算法的核心思想是&…...

nacos的单机模式和集群模式
文章目录 目录 文章目录 前言 一、nacos数据库配置 二、单机模式 三、集群模式 四、使用nginx集群模式的负载均衡 总结 前言 一、nacos数据库配置 在数据库中创建nacos_config 编码格式utf8-mb4的数据库 把上面的数据库文件导入数据库 在 配置文件中添加如下 spring.datasour…...

Spring Boot 整合定时任务完成 从0 到1
Java 定时任务学习 定时任务概述 > 定时任务的应用场景非常广泛, 如果说 我们想要在某时某地去尝试的做某件事 就需要用到定时任务来通知我们 ,大家可以看下面例子 如果需要明天 早起,哪我们一般会去定一个闹钟去通知我们, 而在编程中 有许许多多的…...
Dialogue Transformers
Abstract 本文介绍了一种基于 Transformer 架构的 对话策略,其中自注意力机制被应用于对话轮次(dialogue turns)的序列上。近期的一些工作使用层次化的循环神经网络(hierarchical recurrent neural networks)在对话上下文中对多个话语(utterances)进行编码,但是我们认…...

【遇见青山】项目难点:缓存击穿问题解决方案
【遇见青山】项目难点:缓存击穿问题解决方案1.缓存击穿互斥锁🔒方案逻辑过期方案2.基于互斥锁方案的具体实现3.基于逻辑过期方案的具体实现1.缓存击穿 缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效…...
2023Flag具体实施计划(短期)
重新看了flag ,要做的事情太多,太杂,上周一周时间都在纠结和琢磨,该怎么下手。如何达成小目标。特别是沟通,汇报,演讲能力, 以及整体体系化的思维能力的训练。如何做到多思考,而不是瞎搞。这边重…...

研一寒假C++复习笔记--左值和右值的理解和使用
目录 1--左值和右值的定义 2--简单理解左值和右值的代码 3--非const引用只能接受左值 1--左值和右值的定义 左值:L-Value,L理解为 Location,表示可寻; 右值:R-Value,R理解为 Read,表示可读&a…...
Android 11.0 动态修改SystemProperties中ro开头系统属性的值
需求: 在11.0的产品开发中,对于定制功能的需求很多,有些机型要求可以修改系统属性值,对于系统本身在10.0以后为了系统安全性,不允许修改ro开头的SystemProperties的值,所以如果要求修改ro的相关系统属性&am…...

为什么分库分表
系列文章目录 文章目录系列文章目录前言一、什么是分库分表二、分库分表的原因分库分表三、如何分库分表3.1 垂直拆分1.垂直分库2、垂直分表3.2 水平拆分水平分库水平分表水平分库分表的策略hash取模算法range范围rangehash取模混合地理位置分片预定义算法四、分库分表的问题分…...

1625_MIT 6.828 stabs文档信息整理_下
全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 继续之前的学习笔记,整理一下最近看过的一点stabs资料。 这一页中有一半的信息是Fortran专用的,直接跳过。参数的符号修饰符是p,…...

论文阅读 | Rethinking Coarse-to-Fine Approach in Single Image Deblurring
前言:ICCV2021图像单帧运动去糊论文 论文地址:【here】 代码地址:【here】 Rethinking Coarse-to-Fine Approach in Single Image Deblurring 引言 图像去糊来自与物体或相机的运动。现有的deblur领域的深度学习方法大多都是coarse-to-fin…...

Mysql 增删改查(二)—— 增(insert)、删(delete)、改(update)
目录 一、插入 1、insert 2、replace(插入否则更新) 二、更新(update) 三、删除 1、delete 2、truncate(截断表,慎用) 一、插入 1、insert (1) 单行 / 多行插入 全列插入:…...
JSD2212复习串讲
1. Java语言基础阶段 这一部分主要是练,给一些题目还有讲解一些最基础的语法,做一些额外的补充 1.1 基本概念 1.2 变量 1.2.1 数据类型 4类8种 基本类型:整形、浮点型、字符型、布尔型 整形:byte -》short-》int-》long 浮点…...
sphinx 升级到6.x后的Jquery问题
sphinx 升级到6.0 后,以前对于jquery的默认引用方式发生了改变以前在编译后的html中jquery是如下引用的:<script src"_static/jquery.js"></script>而升级到6.0后,对于jquery 是一个googleapi的远程jquery调用…...

NSSCTF Round#8 Basic
from:http://v2ish1yan.top MyDoor 使用php伪协议读取index.php的代码 php://filter/readconvert.base64-encode/resourceindex.php<?php error_reporting(0);if (isset($_GET[N_S.S])) {eval($_GET[N_S.S]); }if(!isset($_GET[file])) {header(Location:/index.php?fi…...

多传感器融合定位十二-基于图优化的建图方法其一
多传感器融合定位十二-基于图优化的建图方法其一1. 基于预积分的融合方案流程1.1 优化问题分析1.2 预积分的作用1.3 基于预积分的建图方案流程2. 预积分模型设计3. 预积分在优化中的使用3.1 使用方法3.2 残差设计3.3 残差雅可比的推导3.3.1 姿态残差的雅可比3.3.2 速度残差的雅…...

RockChip MPP编码
概述瑞芯微提供的媒体处理软件平台(Media Process Platform,简称 MPP)是适用于瑞芯微芯片系列的通用媒体处理软件平台。该平台对应用软件屏蔽了芯片相关的复杂底层处理,其目的是为了屏蔽不同芯片的差异,为使用者提供统…...
【学习笔记】NOIP暴零赛2
细思极恐,我的能力已经退步到这个地步了吗? 数据结构 这题的修改是强行加进去迷惑你的。 考虑怎么求树的带权重心。 完了我只会树形dp 完了完了 结论:设uuu的子树和为szusz_uszu,所有点权值和为sss,那么树的带…...

linux基本功系列之hostname实战
文章目录前言一. hostname命令介绍二. 语法格式及常用选项三. 参考案例3.1 显示本机的主机名3.2 临时修改主机名3.3 显示短格式的主机名3.4 显示主机的ip地址四. 永久修改主机名4.1 centos6 修改主机名的方式4.2 centos7中修改主机名永久生效总结前言 大家好,又见面…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
大模型真的像人一样“思考”和“理解”吗?
Yann LeCun 新研究的核心探讨:大语言模型(LLM)的“理解”和“思考”方式与人类认知的根本差异。 核心问题:大模型真的像人一样“思考”和“理解”吗? 人类的思考方式: 你的大脑是个超级整理师。面对海量信…...
用 FFmpeg 实现 RTMP 推流直播
RTMP(Real-Time Messaging Protocol) 是直播行业中常用的传输协议。 一般来说,直播服务商会给你: ✅ 一个 RTMP 推流地址(你推视频上去) ✅ 一个 HLS 或 FLV 拉流地址(观众观看用)…...

作为点的对象CenterNet论文阅读
摘要 检测器将图像中的物体表示为轴对齐的边界框。大多数成功的目标检测方法都会枚举几乎完整的潜在目标位置列表,并对每一个位置进行分类。这种做法既浪费又低效,并且需要额外的后处理。在本文中,我们采取了不同的方法。我们将物体建模为单…...