开发环境中的调试视图(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);
        }
    }
}

 

 

 

 

      

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java泛型介绍

Java 泛型是 JDK 5 引入的一个特性&#xff0c;它允许我们在定义类、接口和方法时使用类型参数&#xff0c;从而使代码更加灵活和类型安全。泛型的主要目的是在编译期提供类型参数&#xff0c;让程序员能够在编译期间就捕获类型错误&#xff0c;而不是在运行时才发现。这样做提…

C语言学习/复习30--结构体的声明/初始化/typedef改名/内存对齐大小计算

一、自定义数据类型 二、结构体 1.结构体的定义&#xff08;与数组相对比&#xff09; 2.结构体全局/局部变量的定义 3.typedef对结构体改名 4.匿名结构体类型的声明 注意事项1&#xff1a; 匿名后必须立即创建结构体变量 、 5.结构体与链表节点定义 注意事项1&…

Python基础07-高级列表推导式和Lambda函数

在Python中&#xff0c;列表推导式和Lambda函数是处理数据的强大工具。本文将介绍如何使用嵌套列表推导式、带有条件的列表推导式、多可迭代对象的列表推导式、Lambda函数、在列表推导式中使用Lambda函数、用于展平嵌套列表的列表推导式、对元素应用函数、使用Lambda函数与Map和…

Arena-Hard:开源高质量大模型评估基准

开发一个安全、准确的大模型评估基准通常需要包含三个重要内容&#xff1a;1&#xff09;稳定识别模型的能力&#xff1b;2&#xff09;反映真实世界使用情况中的人类偏好&#xff1b;3&#xff09;经常更新以避免过拟合或测试集泄漏。 但传统的基准测试通常是静态的或闭源的&…

程序员缓解工作压力小技巧

文章目录 1. 规划时间和任务2. 学会放松和调节情绪3. 培养兴趣爱好4. 保持健康的生活方式总结 当面对程序员这样需要高度精神集中和持续创新的工作时&#xff0c;缓解工作压力是至关重要的。下面分享一些我个人的经验和方法&#xff0c;希望能对大家有所帮助&#xff1a; 1. 规…

如何让AI生成自己喜欢的歌曲-AI音乐创作的正确方式 - 第507篇

历史文章 AI音乐&#xff0c;8大变现方式——Suno&#xff1a;音乐版的ChatGPT - 第505篇 日赚800&#xff0c;利用淘宝/闲鱼进行AI音乐售卖实操 - 第506篇 导读 在使用AI生成音乐&#xff08;AI写歌&#xff09;的时候&#xff0c;你是不是有这样的困惑&#xff1a; &…

线性模型算法

简介 本文章介绍机器学习中的线性模型有关内容&#xff0c;我将尽可能做到详细得介绍线性模型的所有相关内容 前置 什么是回归 回归的就是整合&#xff0b;预测 回归处理的问题可以预测&#xff1a; 预测房价 销售额的预测 设定贷款额度 可以根据事物的相关特征预测出对…

模型部署的艺术:让深度学习模型跃入生产现实

模型部署的艺术&#xff1a;让深度学习模型跃入生产现实 1 引言 1.1 部署的意义&#xff1a;为何部署是项目成功的关键 在深度学习项目的生命周期中&#xff0c;模型的部署是其成败的关键之一。通常&#xff0c;一个模型从概念构思、数据收集、训练到优化&#xff0c;最终目的…

【UML建模】用例图

1 参与者 参与者的概念&#xff1a; 指系统以外的、需要使用系统或与系统交互的外部实体 可以分为&#xff1a;人、外部设备、外部系统 参与者的图形符号&#xff1a; 例 3.1 在一个银行业务系统中&#xff0c;可能会有以下参与者 客户 &#xff1a;在银行业务系统中办理…

详细分析MySQL中的distinct函数(附Demo)

目录 前言1. 基本知识2. 基础Demo3. 进阶Demo 前言 该函数主要用于去重&#xff0c;对于细节知识&#xff0c;此文详细补充说明 1. 基本知识 DISTINCT 是一种用于查询结果中去除重复行的关键字 在查询数据库时&#xff0c;可能会得到重复的结果行&#xff0c;但有时只需要这…

奇妙的探索——偶然发现的bug

今天想在腾讯招聘官网找几个前端的岗位投一下&#xff0c;最近自己也在找工作&#xff0c;结果简历还没有投出去&#xff0c;就发现了腾旭招聘官网的3个前端bug。 1.有时候鼠标hover还没有滑倒下拉选框的菜单上&#xff0c;就消失了&#xff0c;消失的太快了&#xff0c;根本点…

揭秘App广告变现,如何轻松赚取额外收入?

揭秘App广告变现&#xff0c;如何轻松赚取额外收入&#xff1f; 在移动互联网高速发展的今天&#xff0c;APP广告变现已经成为了众多开发者和公司的主要盈利方式。但是&#xff0c;如何让一个APP实现高效的广告变现呢&#xff1f;这是一门大学问&#xff0c;需要我们用心去揣摩…

聚观早报 | TCL召开电视新品发布会;OceanBase 4.3发布

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月22日消息 TCL召开电视新品发布会 OceanBase 4.3发布 科大讯飞推出耳背式助听器 F1联想中国大奖赛开赛 蔚来展…

个人博客建设必备:精选域名和主机的终极攻略

本文目录 &#x1f30f;引言&#x1f30f;域名的选择&#x1f315;域名的重要性品牌识别营销和宣传可访问性和易记性信任和权威感搜索引擎优化&#xff08;SEO&#xff09;未来的灵活性和扩展性保护品牌 &#x1f315;如何选择域名&#x1f315;工具与资源分享国内的主流域名注…

C++ 性能分析的实战指南(gperftools工具)[建议收藏]

文章目录 使用gperftools进行 C 性能分析的实战指南一、编译安装 gperftools1. 下载源代码&#xff1a;2. 编译和安装&#xff1a; 二、编写测试程序三、使用 gperftools 代码示例四、查看分析结果五、一份实际代码实例及实操1.代码实例2.操作命令3.结果分析根据上述数据&#…

我有一种不完美的完美主义,必须要有缺点,没有缺点就是不完美的

《程客有话说》是我们最新推出的一个访谈栏目&#xff0c;邀请了一些国内外有趣的程序员来分享他们的经验、观点与成长故事&#xff0c;我们尝试建立一个程序员交流与学习的平台&#xff0c;也欢迎大家推荐朋友或自己来参加我们的节目&#xff0c;一起加油。 本期我们邀请的程…

App Inventor 2 如何预览PDF文档?

预览PDF文档的方式 你可以使用Activity启动器查看已存储在你的设备上的 pdf 文档&#xff0c;也可以使用Web客户端通过网址URL打开 pdf 文档。 App Inventor 2 可以使用 .pdf 扩展名从程序包资产中查看 pdf 文件&#xff0c;不再需要外部 pdf 查看器&#xff01; 代码如下&a…

二进制,八进制,十六进制 开头的标识符号

1、引言 每个进制开头的标识符号容易忘&#xff0c;写篇小小博客&#xff0c;拯救一下俺的小脑袋瓜子。 2、进制开头标识符号

Ts类型体操详讲 之 extends infer (下)

目录 1、函数 &#xff08;1&#xff09;提取参数类型 &#xff08;2&#xff09;提取返回值类型 2、构造器 &#xff08;1&#xff09;提取构造器返回值 &#xff08;2&#xff09;提取构造器参数类型 3、索引类型 本章我们继续上节的内容继续&#xff0c;展示我们对ex…

干货教程【AI篇】| 文字生成视频工具图文详细使用教程及整合包下载

需要这个工具整合包的小伙伴可以关注一下文章底部公众号&#xff0c;回复关键词【wzsp】即可获取&#xff0c;双击即可使用无需本地部署。 使用教程 首先我们从链接下载到这个zip压缩文件&#xff1a; 然后我们解压之后进入文件夹&#xff0c;出现下面的界面&#xff1a; 我…