牛网网站建设/个人网站首页设计
在线排版不太好看,介意的读者可下载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中修改主机名永久生效总结前言 大家好,又见面…...

Easy-Es框架实践测试整理 基于ElasticSearch的ORM框架
文章目录介绍(1)Elasticsearch java 客户端种类(2)优势和特性分析(3)性能、安全、拓展、社区(2)ES版本及SpringBoot版本说明索引处理(一)索引别名策略&#x…...

【数据结构】双向链表的模拟实现(无头)
目录 前言: 1、认识双向链表中的结点 2、认识并创建无头双向链表 3、实现双向链表当中的一些方法 3.1、遍历输出方法(display) 3.2、得到链表的长度(size) 3.3、查找关键字key是否包含在双链表中(contains) 3.…...

vue自定义指令---处理加载图片失败时出现的碎图,onerror事件
目录 一、自定义指令 1、局部注册和使用 2、全局注册和使用 二、自定义指令处理图片加载失败(碎图) 一、自定义指令 vue中除v-model、v-show等内置指令之外,还允许注册自定义指令,获取DOM元素,扩展额外的功能。 1、局…...

加盟管理系统挑选法则,看完不怕被坑!
经营服装连锁店铺究竟有多难?小编已经不止一次听到身边的老板,抱怨加盟连锁店铺难以管理了,但同时呢,也听到了很多作为加盟商的老板,抱怨总部给的支持和管理不到位。服装加盟店铺管理,到底有哪些难点呢&…...

alertmanager笔记
1 prometheus的思想 所有告警都应该立刻处理掉,不应该存在长时间未解决的告警。所以具体的表现就是高频的数据采集,和告警的自动恢复(默认5分钟) 2 alertmanager API调用 使用如下命令即可手工制造告警,注意startsA…...

Android Jetpack组件之WorkManager后台任务管理的介绍与使用(二)
一、介绍 通过上一篇文,Android Jetpack组件之WorkManager后台任务管理的介绍与使用(一)_蜗牛、Z的博客-CSDN博客 我们可以弄清楚workmanager从接入到使用的基本流程。基本可以满足我们日常。那只是简单的入门。如果遇到更复杂的功能,那简单的就无法满…...

【MySQL】第十七部分 约束
【MySQL】第十七部分 约束 文章目录【MySQL】第十七部分 约束17. 约束17.1 约束的分类17.2 非空约束17.3 唯一性约束17.4 主键约束17.5 自增列约束17.6 外键约束17.7 默认约束17.8 check约束总结17. 约束 约束: 可以在创建表的时候规定约束,也可以在表创建之后添加,约束顾名思…...

java ssm集装箱码头TOS系统调度模块的设计与实现
由于历史和经济体制的原因,国内码头物流企业依然保持大而全的经营模式。企业自己建码头、场地、经营集装箱运输车辆。不过近几年来随着经济改革的进一步深入和竞争的激烈,一些大型的码头物流企业逐步打破以前的经营模式,其中最明显的特征就是…...

MS14-064(OLE远程代码执行漏洞复现)
✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :内网安全-漏洞复现 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台…...

【C++深陷】之shared_ptr
0. 什么是智能指针 使用new 和delete 手动进行动态内存管理很容易出现内存泄漏等问题。C11为了更安全、更方便的管理动态内存,新的标准库提供了两种智能指针(smart pointer):shared_ptr和unique_ptr,以及一个伴随类we…...