IDEA的使用(三)Debug(断点调试)(IntelliJ IDEA 2022.1.3版本)

编程过程中如果出现错误,需要查找和定位错误时,借助程序调试可以快速查找错误。

编写好程序后,可能出现的情况:

        1.没有bug。

        使用Debug的情况:

        2.运行后,出现错误或者异常信息,但是通过日志文件或者控制台,显示了异常信息的位置。

        3.运行后,得到了错误的结果。

        4.运行后,得到了正确的结果,但是在大量、多次运行后,出现了错误的结果。

        (例1:多线程情况下,处理线程安全问题。例2:不同格式的输入数据,出现错误结果。)

1. Debug的步骤

1.添加断点。

2.启动调试。

3.单步执行。

4.观察变量和执行流程,找到并解决问题。

1.1 添加断点

在源码文件中,在想要设置断点的代码行的前面标记行处,单击鼠标左键出现红色圆点,就设置了一个断点。再次单机红色圆点行,就可以取消断点。

1.2 运行调试

单机臭虫,Debug调试运行代码,会停在断点位置。且在调试过程中,可以动态添加或取消断点。

1.3 调试工具按钮介绍

1. 步过:

        开始运行下一步代码,不是下一个断点。且不进入方法内部。

2. 步入、强制步入:

        开始运行下一步代码,且可以进入当前这一行代码调用的方法或构造器内部。

   区别

       步入:只能进入自己写的方法或构造器内部。

       强制步入:可以进入自己写的方法或构造器内部,也可以进入SDK定义的源码中的方法内部。

3. 步出:

        跳出当前这一行代码调用的方法、构造器、源码方法

4. 运行到光标处:

        直接跳到光标所在位置。如果中间有调试标记行,那还是会先进行调试行,再跳转。

5. 恢复程序:

        

        1. 如果后面没有断点,则结束调试,直接出结果。

        2. 如果后面有断点,则直接进入下一个断点位置。

6. 停止调试:

7.查看所有断点:

        显示整个程序执行过程中添加断点的位置。

 8. 显示执行点:

        显示当前代码正在执行哪一行的断点。

9. 静音断点:

        使得当前代码后面所有断点失效,一次执行到底。

2. 多种Debug情况介绍

2.1 方法断点

在方法上设置断点,显示红色菱形块。右键单机菱形块,可以看到监视。

方法输入:默认勾选,表示进入方法时,断点可以被唤醒。

方法退出:需手动勾选,表示在方法退出时,断点也被唤醒。

方法的覆盖:

子类调用父类方法的时候,如果父类方法中方法断点,则子类运行调试时一样会进入父类方法停留调试。

例如,我们进入源码,把源码某个方法设置断点,那么,调试代码中调用这个方法的时候,就会出现断点调试。

2.2 字段断点

在类的属性声明上打断点,默认对属性的修改操作进行监控。每次修改这个属性,都会停留。

当勾选“字段访问”时,每次获取(例如打印)这个变量值,调试也会停留。

2.3 条件断点

设置断点之后,写上执行这个断点的条件。不满足条件的时候,断点不会执行。

2.4 异常断点

对异常进行跟踪,如果程序出现指定异常,程序就执行断点,自动暂停。

例如:设置出现空指针异常,就打断点。

操作:点击查看所有断点按钮,添加断点,选择Java异常断点,搜索空指针异常进行添加,看到已勾选这个断点,点击完成。下次出现这个异常,异常那一行就会出现闪电标识的断点。

2.5 线程调试

挂起线程,输入条件,执行调试到满足该条件的线程,就会暂停。

2.6 强制结束(强制返回)

调试过程中已经发现问题,不希望程序继续执行。

可以选择强制结束(Force Return),然后点击恢复恢复程序,就直接结束了。

但是,如果在程序正在调用方法,方法需要一个返回值才能结束,就会出现

这就比较麻烦了,写不出对的返回值,就只能继续执行完这个方法。

2.7 自定义调试数据视图

在调试面板的空白处右键,选择自定义数据视图。

出现这个框:

例如:

2.8 常见问题

问题:使用Step into(步入)时,会出现无法进入源码的情况,怎么办?

方案1:使用force step into(强制步入)。

方案2:点击进入如下页面,把java.*javax.*取消勾选。(不建议

使得步入和强制步入完全一样,没有区别。

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

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

相关文章

go的面向对象学习

文章目录 面向对象编程(上)1.问题与解决思路2.结构体1》Golang语言面向对象编程说明2》结构体与结构体变量(实例/对象)的关系的示意图3》入门案例(using struct to solve the problem of cat growing) 3.结构体的具体应用4.创建结构体变量和访问结构体字段5.struct类型的内存分…

vue3 组件v-model绑定props里的值,修改组件的值要触发回调

很早之前就写了&#xff0c;一直没写篇博客记录下 <select v-model"typeVal" />const emit defineEmits([update:type]); const props defineProps({type: { type: String, default: }, });const typeVal computed({get() {return props.type;},set(value…

Docker-compose创建LNMP服务并运行Wordpress网站平台

一、部署过程 1.安装Docker #关闭防火墙 systemctl stop firewalld.service setenforce 0#安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 #设置阿里云镜像源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/d…

17基于matlab卡尔曼滤波的行人跟踪算法,并给出算法估计误差结果,判断算法的跟踪精确性,程序已调通,可直接运行,基于MATLAB平台,可直接拍下。

17基于matlab卡尔曼滤波的行人跟踪算法&#xff0c;并给出算法估计误差结果&#xff0c;判断算法的跟踪精确性&#xff0c;程序已调通&#xff0c;可直接运行&#xff0c;基于MATLAB平台&#xff0c;可直接拍下。 17matlab卡尔曼滤波行人跟踪 (xiaohongshu.com)

【Redis学习1】Redis持久化机制详解

Redis持久化机制详解 一、Redis为什么需要持久化机制 Redis一般用作缓存&#xff0c;其数据存储在内存中&#xff0c;当Redis宕机后&#xff0c;内存中的数据将会丢失。因此使用缓存的时候&#xff0c;我们经常需要对内存中的数据进行持久化也就是将内存中的数据写入到硬盘中…

Jetpack:004-如何使用文本组件

文章目录 1. 概念介绍2. 使用方法2.1 通用参数2.2 专用参数 3. 示例代码4. 内容总结 我们在上一章回中介绍了Jetpack组件在布局中的对齐方式&#xff0c;本章回中主要介绍文 本组件的使用方法。闲话休提&#xff0c;让我们一起Talk Android Jetpack吧 1. 概念介绍 我们在本章…

基于ffmpeg给视频添加时间字幕

FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序&#xff0c;我们可以基于ffmpeg对视频进行各种操作。本文主要介绍基于ffmpeg给视频添加字幕&#xff0c;字幕的内容为视频所播放的时间&#xff08;故需要安装ffmpeg&#xff0c;具…

ssti 前置学习

python venv环境 可以把它想象成一个容器&#xff0c;该容器供你用来存放你的Python脚本以及安装各种Python第三方模块&#xff0c;容器里的环境和本机是完全分开的 创建venv环境安装flask #apt install python3.10-venv #cd /opt #python3 -m venv flask1 #cd /opt 选…

吃透底层:从路由到前缀树

前言 今天学到关于路由相关文章&#xff0c;发现动态路由中有一个很常见的实现方式是前缀树&#xff0c;很感兴趣这个算法&#xff0c;故进行记录。 前缀树 Trie&#xff08;又被叫做字典树&#xff09;可以看作是一个确定有限状态自动机&#xff0c;尽管边上的符号一般是隐含…

Netty通信在中间件组件中的广泛使用-Dubbo3举例

Netty是一个高性能异步IO通信框架&#xff0c;封装了NIO&#xff0c;对各种bug做了很好的优化解决。所以很多中间件底层的通信都会使用Netty&#xff0c;比如说&#xff1a;Dubbo3&#xff0c;rocketmq&#xff0c;ElasticSearch等。 比方说&#xff0c;我们使用dubbo作为rpc跨…

基于SSM线上课程管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

C++构造函数

在本文中&#xff0c;您将学习C 中的构造函数。您将学习什么是构造函数&#xff0c;如何创建它以及C 中的构造函数类型。 构造函数是成员函数的一种特殊类型&#xff0c;它在创建对象时会自动对其进行初始化。编译器通过其名称和返回类型将给定的成员函数标识为构造函数。构造函…

各报文段格式集合

数据链路层-- MAC帧 前导码8B&#xff1a;数据链路层将封装好的MAC帧交付给物理层进行发送&#xff0c;物理层在发送MAC帧前&#xff0c;还要在前面添加8字节的前导码&#xff08;分为7字节的前同步码1字节的帧开始定界符&#xff09;MAC地址长度6B数据长度46&#xff5e;1500B…

爬取微博热榜并将其存储为csv文件

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 前言1.…

防止SQL注入攻击的综合解决方案

文章目录 摘要背景和危害性防御措施示例代码&#xff08;Java&#xff09;示例代码&#xff08;PHP&#xff09;示例MySQL命令示例代码&#xff08;Python&#xff09;示例代码&#xff08;C#&#xff0c;使用Entity Framework&#xff09; 进一步防御SQL注入攻击的措施使用ORM…

【Linux】Git使用

一、Git简介 Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理很小或非常大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布…

Kafka 简介之(学习之路)

正文 一、简介 1.1 概述 Kafka是最初由Linkedin公司开发&#xff0c;是一个分布式、分区的、多副本的、多订阅者&#xff0c;基于zookeeper协调的分布式日志系统&#xff08;也可以当做MQ系统&#xff09;&#xff0c;常见可以用于web/nginx日志、访问日志&#xff0c;消息服务…

原生JS-鼠标拖动

原生JS-鼠标拖动 通过鼠标的点击事件通过h5的属性 通过鼠标的点击事件 步骤&#xff1a; 1. 鼠标按下div。 2. 鼠标移动&#xff0c;div跟着移动 原生js&#xff0c;实现拖拽效果。1. 给被拖拽的div加上 onmousedown 鼠标【按下事件】。鼠标按下的时候&#xff0c;开始监听鼠标…

【Spring框架学习3】Spring Bean的作用域 及 生命周期

一、Spring Bean的作用域有哪些&#xff1f; Spring框架支持以下五种Bean的作用域&#xff1a; Singleton&#xff1a;这是默认的作用域&#xff0c;在每个Spring IoC容器中只有一个Bean的实例(IoC初始化后)。Spring 中的 bean 默认都是单例的&#xff0c;是对单例设计模式的…

cesium图标漂移分析与解决

漂移现象如下 什么是图标漂移&#xff1f; 随着视野改变&#xff0c;图标相对于地面发生了相对位置的变化 让人感觉到图标有飘忽不定的感觉 原因分析 图标是静止的&#xff0c;它的位置在世界坐标系中是绝对的、静止的。 漂移大部分的原因是&#xff1a; 透视关系发生了错…