开发环境中的调试视图(IDEA)

        当程序员写完一个代码时必然要运行这个代码,但是一个没有异常的代码却未必满足我们的要求,因此就要求程序员对已经写好的代码进行调试操作。在之前,如果我们要看某一个程序是否满足我们的需求,一般情况下会对程序运行的结果进行打印,用以观察程序执行的结果是否满足设计需求。这种方法有两个很明显的弊端,一个是频繁对程序中的数据进行打印不仅增加了代码的冗杂程度,而且如果没有对打印的数据进行注释,那么就很难对不同的数据进行区分;其次,如果运行的结果并不符合设计需求,那么就需要我们按照程序运行的流程走遍整个程序,以此检查不符合需求的部分,倘若这个不满足需求的部分出现在循环结构中,那么这个工作量无疑是巨大的,单靠人脑跑遍整个循环结构明显不现实。为了处理这样的问题,在开发环境中提供了分析程序的手段——断点breakpoint。

        在IDEA中,我们通过在代码的左侧的行号后面单击左键添加断点,断点添加成功后会在行号后面出现一个红色的圆点,再次单击左键可以取消断点。在定义了断点之后,右键在弹出的窗口中选择Debug按钮或者单击右上角的虫子模样的按钮就可以对程序进行调试操作,程序会在定了断点的地方停下来,并显示出此时涉及的变量以及常量的当前值,如下图所示:

        当我们点击Debug按钮对程序进行调试以后,在IDEA界面上会跳出一个下图模样的窗口,这个窗口可以简单的分为三大块,分别是方法栈的浏览区域,操作区域一击变量值的观察区域。在方法栈的浏览区域中包括了线程以及在我们定义了断点时正在执行没有退出栈帧的方法,最上面一行表示线程,下面表示的是方法的栈帧,方法名后面的数字表明了程序执行的行号;在变量观察区注意到有一个this,this的后面跟了一个类的名称,点开这个this能后看到这个类中储存的常量以及变量的相关信息;左侧的操作区是对程序的执行或停止等进行操作,上侧的操作按钮涉及到的是程序调试的相关内容,分别代表了step over、step into、force step into、step out、run to cursor。

        第一个图标step over是单步调试,表示跳过该方法,即如果当前执行的是一个方法,那么会把这个方法当作一步执行完,不会进入这个方法的内部。第二个图标step into也是单步执行,表示进入自定义方法,即如果当前执行的是一个自定义方法,那么在按下这个按钮后吗,程序会进入这个自定义方法的内部,不过不会进入JDK内部的方法。比如我们对第一张图片中的程序进行修改,添加一个自定义方法go,并对其进行调用,仍然在第7行添加断点。程序如下所示:

package com.duandian.demo;public class DuanDianDemo {private int num = 10;public void run(int a ){num = a*num;System.out.println(num);go(num);}public void go(int b){System.out.println("DuanDianDemo.go");System.out.println("num="+b);}public static void main(String[] args) {DuanDianDemo duanDianDemo = new DuanDianDemo();duanDianDemo.run(3);}
}

        这时,如果我们点按step over图标,则会发现,当代码执行到go(num);这一行时,代码会将它当作一行普通代码执行,并不会进入方法内部,但如果我们点击的时step into按钮,那么程序执行到这一行时则会进入go方法的内部,如下图所示(注意区分执行完go(num)这行后光标所在的行的位置)。

 

        第三个图标是force step into,它表示的是强制进入方法内部,因此在按下这个按钮的时候,程序可以进入任何方法,包括JDK的内部方法。第四个图标是step out,表示跳出方法,当我们用单步调试对程序进行调试并且进入子方法内部时,如果按下step out 按钮,那么程序会自动执行完子方法剩余的部分,并且跳出子方法,即使是进入JDK内部的方法,也能通过这个操作进行退出。        

        最后一个图标是 run to cursor,它表示一直执行直到光标停止,如果用在普通程序中,一般就是将整个程序执行完成,而在循环结构中,点击依次就代表循环一次,比如我们在上上面的程序中添加循环结构,代码变为下面样子,这时先用单步调试让程序进入循环结构,然后按下run to cursor图标,调试结果如下面的三组图片所示,要注意对比图中数据的变化:

package com.duandian.demo;public class DuanDianDemo {private int num = 10;public void run(int a ){num = a*num;System.out.println(num);go(num);}public void go(int b){System.out.println("DuanDianDemo.go");System.out.println("num="+b);}public static void main(String[] args) {DuanDianDemo duanDianDemo = new DuanDianDemo();duanDianDemo.run(3);for (int i = 0; i < 3; i++) {System.out.println(i);}}
}

 

 

 

 

      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/2405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

茶饮门店本地生活抖音团购运营方案计划书

【干货资料持续更新&#xff0c;以防走丢】 茶饮门店本地生活抖音团购运营方案计划书 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 PPT可编辑80页&#xff08;完整资料包含以下内容&#xff09; 目录 抖音本地生活运营方案 1. 账号基础搭建与优化 - 门店账号…

Php-WebView 现代跨平台 GUI分享

GitHub :php-webview 一个用于 C/C 的小型跨平台 Web 视图库&#xff0c;用于构建现代跨平台 GUI。 该项目的目标是为最广泛使用的平台创建一个通用的 HTML5 UI 抽象层。 它支持双向 JavaScript 绑定&#xff08;从 C/C 调用 JavaScript 和从 JavaScript 调用 C/C&#xff09;。…

ClickHouse 高可用之副本

文章目录 ClickHouse 副本支持副本的引擎配置高可用副本副本应用1.副本表概述2.创建副本表3.写入模拟数据4.副本验证 扩展 —— 在 Zookeeper 中查看副本表信息 ClickHouse 副本 ClickHouse 通过副本机制&#xff0c;可以将数据拷贝存储在不同的节点上。这样&#xff0c;如果一…

我的世界服务器设计思路应该是什么样?

我的世界服务器设计思路可以从这4个方面展开&#xff1a;1.选择你喜欢的东西&#xff1b;2.认识你的极限&#xff1b;3.注入新鲜元素&#xff1b;4.让服务器变得享受且有回报。 1.选择你喜欢的东西 设计服务器的首要规则是创造一些你自己会积极享受玩的东西。没有人愿意花费宝…

在Spring boot中指定随机可用的端口

​ 正常情况下每个spring boot启动都有固定的端口&#xff0c;也就是8080&#xff0c;如果启动多个项目&#xff0c;很容易出现端口冲突&#xff0c;那么怎么解决这个问题呢&#xff1f; 解决方案1&#xff1a; random 随机端口 ​ 在spring boot中&#xff0c;可以通过${ran…

linux的一些实用操作

快捷键 强制停止 ctrlc强制停止或退出命令的输入 退出登出 ctrld强制退出用户登录或退出某些程序的专属页面&#xff08;如py&#xff09; ps&#xff1a;不能退出vi/vim 历史命令搜索 history可以查看历史命令&#xff0c;用来复制粘贴 在使用history之后&#xff0c;…

fnm:Rust开发的高效Node版本管理工具

简介 fnm 是一个基于 Rust 开发的 Node 版本管理工具&#xff0c;它的目标是提供一个快速、简单且可靠的方式来管理 Node.js 的不同版本。同时&#xff0c;它是跨平台的&#xff0c;支持 macOS、Linux、Windows。&#x1f680; Fast and simple Node.js version manager, buil…

pycharm-git 配置(1)

1.安装git2.pycharm 中配置git 插件 弹出Git版本号&#xff0c;即配置成功。3.创建本地仓库 VCS->VCS operations->create repository->设置本地目录 左下角可以看到git本地仓库git可以看到push,commit。 4.配置远方仓库&#xff0c;此时确保git上是有这个项目…

【linux】chmod权限开放(整个文件夹)

文章目录 起因权限查看权限修改 失败权限修改成功 起因 想要共享conda环境给同事&#xff0c;发现同事没权限。 权限查看 ls #查看当前目录 ls -l # 查看当前目录的东西和权限正常情况下是显示 三个rwx分别属于user&#xff0c;group&#xff0c;others 前面第一个rwx 是针…

美容预约小程序:简单三步,开启高效预约模式

在当今的数字化时代&#xff0c;一个小程序可以极大地提高美容院的效率和客户满意度。下面我们将详细说明如何通过以下步骤来搭建一个美容院预约小程序。 首先&#xff0c;你需要注册并登录到乔拓云网&#xff0c;这是 一个在线平台&#xff0c;可以帮助你快速创建并管理你的小…

腾讯云服务器,部署mysql数据库后无法远程访问?

一&#xff0c;首先确定自己部署的数据库&#xff0c;是否可以正常登录&#xff0c;验证部署是否是否成功 mysql -u root -p二、放开mysql远程访问权限&#xff0c;依次输入这些命令 create user root% identified with mysql_native_password by xxxxx; grant all privilege…

k8s学习(三十六)centos下离线部署kubernetes1.30(单主节点)

文章目录 服务器准备工作一、升级操作系统内核1 查看操作系统和内核版本2 下载内核离线升级包3 升级内核4 确认内核版本 二、修改主机名/hosts文件1 修改主机名2 修改hosts文件 三、关闭防火墙四、关闭SELINUX配置五、时间同步1 下载NTP2 卸载3 安装4 配置4.1 主节点配置4.2 从…

Linux sudo suid提权练习

题目比较简单&#xff0c;可以利用sudo和多种suid程序提权&#xff0c;做个记录 进入靶场题目环境 获得节点信息 远程连接上 执行命令id&#xff0c;发现只是admin普通账户 sudo提权 发现存在 /usr/bin/vim, /usr/bin/bash, /usr/bin/more, /usr/bin/less, /usr/bin/nano, /…

计算机java项目|springboot校园一卡通

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、Python项目、前端项目、人工智能与大数据、简…

网络爬虫快速入门及爬取百度搜索结果(附源码)

前言 爬虫的基本结构及工作流程 1. 确定目标 首先&#xff0c;确定你想要爬取的目标&#xff0c;包括目标网站或网页、需要提取的数据类型&#xff08;如文本、图片、视频等&#xff09;以及爬取的深度&#xff08;单页、整个网站等&#xff09;。 2. 获取网页内容 使用HT…

AJAX——事件循环(EventLoop)

1.事件循环&#xff08;EventLoop&#xff09; 概念&#xff1a;JavaScript有一个基于事件循环的并发模型&#xff0c;事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。这个模型与其它语言中的模型截然不同&#xff0c;比如C和Java。 原因&#xff1a;JavaScri…

【S32DS RTD实战】-1.5-S32DS使用Post-Build调用第三方插件-自动对生成的s19,Hex,Bin文件二次编辑

<--返回「Autosar_MCAL高阶配置」专栏主页--> 案例背景&#xff1a; 在《【S32DS RTD实战】-1.3-S32K3工程生成S19&#xff0c;BIN&#xff0c;Hex文件&#xff0c;以及Post-build steps的妙用_s32ds如何生成s19或hex文件-CSDN博客https://blog.csdn.net/qfmzhu/articl…

Json三方库介绍

目录 Json是干什么的Json序列化代码Json反序列化代码 Json是干什么的 Json是一种轻量级的数据交换格式&#xff0c;也叫做数据序列化方式。Json完全独立于编程语言的文本格式来存储和表述数据。易于人阅读和编写&#xff0c;同时也易于机器解析和生成&#xff0c;并有效地提升…

【前后端】django与vue的结合使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前后端分离的简介二、django与vue的结合使用三、总结 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人会主动学习使用一些开发工具&a…

企业级DDoS防护与内网文件安全防护:全方位策略与技术实践

在数字化转型的浪潮中&#xff0c;企业面临着日益严峻的网络安全威胁&#xff0c;其中DDoS&#xff08;分布式拒绝服务&#xff09;攻击与内网文件防护是两个至关重要的议题。本文将深入探讨企业如何通过综合运用多种技术和策略&#xff0c;构建起强大的DDoS防护体系与内网文件…