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中修改主机名永久生效总结前言 大家好,又见面…...
3步搞定安卓应用Windows安装:告别臃肿模拟器的终极解决方案
3步搞定安卓应用Windows安装:告别臃肿模拟器的终极解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否厌倦了那些占用大量系统资源、启动缓慢的…...
【模拟CMOS集成电路】噪声分析实战指南——从模型到计算的完整路径
1. 噪声分析的必要性与基础概念 做模拟电路设计的朋友们应该都深有体会,噪声就像个甩不掉的影子,时时刻刻影响着我们的设计。记得我第一次做低噪声放大器时,仿真结果看起来很美,实测却发现信号完全被噪声淹没,那种挫败…...
别再只盯着屏蔽罩了!PCB布局与软件防抖,才是低成本搞定EMC(静电/辐射/脉冲群)的关键
低成本EMC设计实战:PCB布局与软件防抖的黄金法则 当谈到电磁兼容性(EMC)设计时,许多工程师的第一反应往往是增加屏蔽罩、使用昂贵的滤波器或购买高规格的元器件。这种思路虽然有效,但对于资源有限的初创团队和小型项目…...
FreeRTOS移植避坑指南:当你的芯片不在官方支持列表时(以S3C2440/GCC为例)
FreeRTOS移植方法论:非官方支持芯片的通用适配策略 当你在开源社区下载FreeRTOS压缩包时,是否注意到portable目录下那些以芯片型号命名的文件夹?ARM_CM3、ARM_CM4F、MSP430X——这些官方支持的平台享受着"开箱即用"的便利。但当你手…...
Hermes-Agent 智能体核心能力与实战效能深度评测
在构建自动化工作流或智能客服系统时,开发者最常遇到的痛点往往不是模型本身不够聪明,而是“记不住”和“乱执行”。很多时候,一个智能体在前几轮对话中还逻辑清晰,一旦上下文拉长,就开始遗忘关键约束,或者…...
Cursor Pro破解工具:5步实现永久免费使用的完整指南
Cursor Pro破解工具:5步实现永久免费使用的完整指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial…...
RevokeMsgPatcher实战指南:Windows微信QQ防撤回的终极秘籍
RevokeMsgPatcher实战指南:Windows微信QQ防撤回的终极秘籍 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcod…...
【DeepSeek API接入实战指南】:20年架构师亲授5大避坑法则与3小时极速接入方案
更多请点击: https://intelliparadigm.com 第一章:DeepSeek API接入开发教程 DeepSeek 提供了稳定、高性能的大模型 API 接口,支持文本生成、对话补全与函数调用等多种能力。开发者需通过 RESTful 方式调用其 OpenAPI v1 接口,所…...
Swift原生大语言模型推理引擎llmfarm_core.swift集成与优化指南
1. 项目概述:一个为Swift生态打造的本地大语言模型推理引擎 最近在折腾一个iOS上的AI应用,想把一些轻量级的开源大语言模型(LLM)直接跑在手机端。大家都知道,现在主流的LLM推理框架,像llama.cpp、ollama&am…...
开源的精神内核:是自由协作,还是商业公司的免费劳动力?
一、溯源:开源精神的三重底色——自由、共享与协作要理解开源的本质,我们必须先回到其精神原点。开源运动自诞生之日起,就携带着自由、共享与协作的基因,这三者共同构成了其精神内核的底色,缺一不可。自由,…...
