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中修改主机名永久生效总结前言 大家好,又见面…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...
【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。
2024 年,高端封装市场规模为 80 亿美元,预计到 2030 年将超过 280 亿美元,2024-2030 年复合年增长率为 23%。 细分到各个终端市场,最大的高端性能封装市场是“电信和基础设施”,2024 年该市场创造了超过 67% 的收入。…...
Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用
Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用 Linux 内核内存管理是构成整个内核性能和系统稳定性的基础,但这一子系统结构复杂,常常有设置失败、性能展示不良、OOM 杀进程等问题。要分析这些问题,需要一套工具化、…...
新版NANO下载烧录过程
一、序言 搭建 Jetson 系列产品烧录系统的环境需要在电脑主机上安装 Ubuntu 系统。此处使用 18.04 LTS。 二、环境搭建 1、安装库 $ sudo apt-get install qemu-user-static$ sudo apt-get install python 搭建环境的过程需要这个应用库来将某些 NVIDIA 软件组件安装到 Je…...
