开发环境中的调试视图(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. 账号基础搭建与优化 - 门店账号…

练习题(2024/4/23)

1分发糖果 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果&#xff0c;计算并返回…

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;如果一…

Linux登录后的提示信息在哪里配置及配置方法

一、在哪配置 首先&#xff0c;用户的个性化提示信息可以通过编辑用户的.bashrc或.bash_profile文件来实现。这些文件通常位于用户的主目录下。你可以使用文本编辑器&#xff08;如vi、nano或gedit&#xff09;打开这些文件&#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 从…

Mysql8 创建表,按年/月分区存储

一.创建订单表orders &#xff1a; CREATE TABLE orders ( order_id INT NOT NULL, order_date DATE NOT NULL, amount DECIMAL(10, 2) NOT NULL ) PARTITION BY RANGE (YEAR(order_date)) ( PARTITION p0 VALUES LESS THAN (1991), PARTITION p1 VALUES …

LeetCode热题Hot100 - 最长有效括号

一刷~ 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 思路&#xff1a; 用栈保存最近的一个非有效括号子串的位置&#xff0c;当遇到(时&#xff0c;把当前下标入栈。遇到)时&#xff0c;出栈&#xff0c;出…

DPDK helloworld 解析

1. 学习目的 计划通过学习 DPDK 官方提供的 demo&#xff0c; 对 DPDK API 的使用有一些了解&#xff0c;helloworld 程序是其中最简单的程序&#xff0c;还是实际上手学习能更快一些。 2. 编译 helloworld 源码 环境变量设置&#xff1a; export RTE_SDK/home//dpdk/dpdk-stab…

nn.DataParallel

nn.DataParallel 是 PyTorch 中的一个模块&#xff0c;用于在多个 GPU 上并行运行模型。当有多个 GPU 并且想要利用它们来加速训练或推理时&#xff0c;这个模块会非常有用。nn.DataParallel 通过对模型中的每个子模块进行复制&#xff0c;并将输入数据分割成多个部分&#xff…

C++ iovec结构体

iovec是一个结构体&#xff0c;用于描述一个数据缓冲区。它通常与readv和writev系统调用一起使用&#xff0c;用于在一次系统调用中读取或写入多个缓冲区。 struct iovec {void *iov_base; // 缓冲区起始地址size_t iov_len; // 缓冲区长度 };ssize_t readv(int fd, const str…

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, /…