IDEA debug断点调试认识与技巧

news2024/11/17 3:34:21

IDEA debug断点调试认识与技巧

文章目录

  • IDEA debug断点调试认识与技巧
    • 认识debug
      • 常见的操作
      • 如何开启debug模式
    • 基本用法和快捷键
      • 1、显示执行点(Alt + F10)
      • 2、步过(F8)
      • 3、步入(F7)
      • 4、强制步入(Alt + Shift + F7)
      • 5、步出(Shift + F8)
      • 6、丟帧
      • 7、运行到光标处(Alt + F9)
      • 8、评估表达式(Alt + F8)
      • 9、跟踪当前流链
      • 10、恢复程序(F9)
      • 11、终止程序(Ctrl + F2)
      • 12、查看断点(Ctrl + Shift + F8)
      • 13、静音断点
      • 14、存放变量信息
      • 15、监视变量变化
    • 设置断点调试和断点分类
      • 1、属性断点
      • 2、方法断点
      • 3、行断点
      • 4、异常断点
      • 5、条件断点
      • 6、流断点
      • 7、多线程断点
    • 断点调试小技巧

认识debug

在我们开发应用程序的过程中,调试是非常重要的一环,而IDEA作为一款流行的开发工具,其内置的调试器也同样强大易用。在IDEA中进行debug操作是非常简单的。我们只需要启动debug模式、设置断点、运行程序,并进行必要的调试操作即可。通过debug,我们可以更快速地定位问题,提高开发效率。

常见的操作

  1. 查看变量值

    查看变量的值来分析程序的执行过程。在IDEA底部的调试窗口中查看变量的值。另外,在代码中选中一个变量名,可以通过右键菜单中的Evaluate Expression查看变量值

  2. 单步执行代码

    使用F8键进行单步执行代码。单步执行是指一次执行一行代码。通过单步执行,我们可以跟踪程序的执行路径,并查看每一行代码的变化

  3. 跳过当前代码块

    执行某个代码块,可以使用F9键跳过当前代码块

  4. 修改变量值

    修改变量的值。选中一个变量名,右键菜单中选择Set Value,即可修改变量的值

  5. 其他操作

    可以在调试过程中查看函数调用堆栈、查看异常、设置表达式监视等

如何开启debug模式

在IDEA中开启debug模式。单击debug按钮(小虫子按钮)进行调试,或者选择菜单栏的“Run”->“Debug”,即可打开debug模式。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QawBtoNx-1685776701292)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603105953626.png)]

基本用法和快捷键

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wJQ1xGyq-1685776701298)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603111417756.png)]
以下介绍序号根据上图标注顺序讲解

1、显示执行点(Alt + F10)

用的不多,当前如果在别的页面,点击此按钮可以回到断点位置

2、步过(F8)

即不管该行有无断点,一步步往下走,不会进入方法中

3、步入(F7)

可以进入自定义方法,但是不会进入系统类库方法

4、强制步入(Alt + Shift + F7)

可以进入深层方法,包括官方源码

5、步出(Shift + F8)

从对应步入的方法中出来

6、丟帧

如果代码中没有调用其他地方的方法则该按钮呈现灰色,无法使用,只有进入深层方法才可使用,我们可能在学习底层源码时,不小心按快了,错过了想看的位置,点击这个按钮,可以回退到调用方法之前,俗称后悔药,但不同于数据库的事务回退,即插入的数据等不会因为方法回退而消失,这里的回退只是因为记录了栈信息才能够做到

7、运行到光标处(Alt + F9)

用的也不多,主要为了快速跳转到光标指向的那一行

8、评估表达式(Alt + F8)

用于计算表达式,用表达式查询对应元素

public class User {
    private String username;
    private String password;

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }public static void main(String[] args) {
        //演示 评估表达式
        List<User> users = new ArrayList<>();
        users.add(new User("张三", "123456"));
        users.add(new User("李四", "123456"));
        users.add(new User("王五", "123456"));
        users.add(new User("赵六", "123456"));

        //演示  users.get(0)  users.get(3)
        System.out.println(users);  //在此打入断点
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OLzCOTIU-1685776701299)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603123106199.png)]

9、跟踪当前流链

//演示流断点
List<Integer> list = new ArrayList<>(Arrays.asList(1, 3, 3, 4, 4, 4, 5, 6, 78));
List<Integer> collect = list.stream()
    //先将偶数筛选,再去重,返回集合
    .filter(s -> s % 2 == 0)
    .distinct()
    .collect(Collectors.toList());

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u8xyQnHS-1685776701300)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603140208408.png)]

10、恢复程序(F9)

跳转到指定的断点处,如果代码中两断点之间的代码不想慢慢步过,可以点击此按钮直接飞跃中间代码步骤到下一个断点

11、终止程序(Ctrl + F2)

这里是停止调试的意思,即调试停止但程序可能还在运行中,若想在停止调试同时让程序停止在此处,可以在方法栈右键Force Return,即强制返回,再点击恢复程序Resumer Program,可以直接终止返回,程序在此处停止

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U8koBGue-1685776701302)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603135603283.png)]

12、查看断点(Ctrl + Shift + F8)

基本功能如下,主要用于查看断点信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WqfX2p7u-1685776701303)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603130530898.png)]

13、静音断点

暂时禁用掉断点,方便程序继续运行,一般配合恢复程序

14、存放变量信息

这里是一片区域,这里存放了很多变量信息,方便查看

15、监视变量变化

可以在这里监控变量的变化,这里其实默认是在变量信息栏中,拉出来只是为了方便查看

设置断点调试和断点分类

在IDEA中进行debug操作时,我们需要设置断点。断点是代码执行到某一行时暂停程序执行的标记。在程序的关键位置设置断点,可以帮助我们分析程序的执行过程,定位问题所在。在Java代码中,可以通过单击行号左侧的空白区域设置断点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aTFF0wo0-1685776701304)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603124039094.png)]
以下介绍序号根据上图标注顺序讲解

1、属性断点

属性断点打在属性上,会出现小眼睛图标,因为一般使用gettersetter方法设值,这样我们就不用在gettersetter方法上打断点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zblqio0t-1685776701305)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603132745373.png)]

2、方法断点

方法断点打在方法上,会出现菱形图标,最好使用在接口方法上,这样当我们调试源码,可直接跳转到对应的实现方法上,不用慢慢去找

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JMBUP3e2-1685776701306)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603140646454.png)]

3、行断点

普通行断点,打在代码行上,会出现圆形图标,debug运行时会停在此处

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wUguO6Kg-1685776701307)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603141311664.png)]

4、异常断点

如果程序出现某异常,可以使用异常断点快速定位异常位置,会出现闪电图标,哪里出现停那里

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L3rgQaNy-1685776701308)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603142253761.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zn2rb9zq-1685776701309)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603142449704.png)]

5、条件断点

不想一步步走下去,而是满足某条件时打断点,只需在断点上右键condition中填写条件,条件满足自动跳到那里

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E6R1I7c1-1685776701310)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603141505247.png)]

6、流断点

在Jdk1.8后,出现了Stream流新特性,想要在使用流时查看中间的步骤是怎么走的,可以使用流断点,只需要在流条件上添加断点,点击跟踪流链即可查看流的步骤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tW8KwUz7-1685776701313)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603143203406.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gyKNFak7-1685776701314)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603143656084.png)]

7、多线程断点

多线程断点的设置只需在断点处右键将挂起设置为线程,在多线程项目中,使用默认All来调试多线程程序,可能某条线程会没有停留就跑掉了,而使用Thead这种方式可以捕获到运行的所有线程,精准控制每条线程。且这样带来的好处就是,当运行定时任务时,在调试过程中由于暂停了线程的执行,如果下一个任务到时间了,也不会执行,防止多次定时任务执行带来的干扰

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ujmiCd1A-1685776701315)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230603144609996.png)]

断点调试小技巧

  • 推荐使用智能步入:使用Step Into (Alt + F7) 或者 Force Step Into (Alt + Shift + F7)会根据方法调用顺序依次进入方法内部,比较麻烦。使用智能步入,Smart Step Into (Shift + F7)会自动定位到当前断点行,并列出需要进入的方法,点击方法进入方法内部
  • 使用条件断点来调试:在Condition选项中添加条件代码,在代码中定位特定情况下的问题,避免在单步执行中浪费时间
  • 设置异常断点来调试:设置需要捕获的异常类型,当该异常被抛出时,程序会自动暂停执行。更快定位异常出现的位置
  • 回滚断点回到之前的程序状态:通过回滚断点Rollback按钮,选择需要回滚到的历史状态,查找程序执行过程中出现的问题,并暂时回到之前的状态进行分析
  • 设置多个断点:更好地掌握程序的执行过程,在一个较大的代码区间中跟踪程序的执行过程,并且在程序的多个阶段中定位问题
  • 在调试窗口中选择调试选项:更高效地进行调试操作

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

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

相关文章

【容器云架构】确定容器网络calico最佳网络选项

大图 了解 Calico 支持的不同网络选项&#xff0c;以便您可以根据需要选择最佳选项。 价值 Calico 灵活的模块化架构支持广泛的部署选项&#xff0c;因此您可以选择适合您特定环境和需求的最佳网络方法。这包括使用各种 CNI 和 IPAM 插件以及底层网络类型以非覆盖或覆盖模式运行…

线性回归模型一二三

文章目录 什么是线性回归线性回归的求解一元线性回归&#xff08;最小二乘法&#xff09;多元线性回归 衍生求解梯度下降智能搜索算法求解&#xff08;PSO&#xff09;简要分析 线性回归与简单神经网络联系类比推导反向传播 总结 什么是线性回归 线性回归的基本假设是&#xf…

Java JUC并发编程调优

前言 1、JUC是指有关 java.util.concurrent包以及其子包&#xff0c;这些包都是有关线程操作的包 2、HTTPS服务请求中&#xff0c;WEB服务只负责创建主线程来接收外部的HTTPS请求&#xff0c;如果不做任何处理&#xff0c;默认业务逻辑是通过主线程来做的&#xff0c;如果业务…

预训练大语言模型的三种微调技术总结:fine-tuning、parameter-efficient fine-tuning和prompt-tuning

预训练大模型&#xff0c;尤其是大语言模型已经是当前最火热的AI技术。2018年Google发布BERT模型&#xff08;BERT在DataLearner官方模型卡信息&#xff1a;https://www.datalearner.com/ai-models/pretrained-models/BERT &#xff09;的时候&#xff0c;大家还没有意识到本轮…

国际植物命名数据库(International Plant Names Index)

功能介绍 https://www.ipni.org/ 是国际植物命名数据库&#xff08;International Plant Names Index&#xff09;的官方网站。国际植物命名数据库是一个全球性的植物命名和分类资源&#xff0c;旨在提供植物命名信息的权威来源。以下是该网站的一些特点和功能&#xff1a; 植…

wmvcore.dll丢失怎么弄?解决wmvcore.dll丢失问题

wmvcore.dll是Windows Media Player中的一个重要组件&#xff0c;它负责处理视频和音频文件的编码和解码。如果您在使用Windows Media Player或其他媒体播放器时遇到了wmvcore.dll丢失的问题&#xff0c;那么您可能无法播放视频或音频文件。在这种情况下&#xff0c;您可以使用…

干货|接口测试必备技能-常见接口协议解析

【摘要】 服务与服务之间传递数据包&#xff0c;往往会因为不同的应用场景&#xff0c;使用不同的通讯协议进行传递。比如网站的访问&#xff0c;常常会使用 HTTP 协议进行传递&#xff0c;文件传输使用 FTP&#xff0c;邮件传递使用 SMTP。上述的三种类型的协议都处于网络模型…

电流环参数自整定及其原理

前言 电流环参数自整定是通过程序计算电流环PI调节器增益以实现环路响应仅受用户设定PI调节器带宽影响&#xff0c;而和电机本身参数无关的目的。 本文分析电流环参数自整定背后的原理&#xff0c;并通过仿真进行验证。 1、永磁同步电机dq轴数学模型 本文提到的电流环参数自…

【论文总结】Creating a Secure Underlay for the Internet

为互联网创建一个安全的底层 摘要&#xff1a; 对手可以利用跨域路由漏洞拦截通信并破坏关键互联网应用的安全性。与此同时&#xff0c;部署诸如边界网关安全协议&#xff08;BGPsec&#xff09;和下一代网络上的可扩展性、控制和隔离&#xff08;SCION&#xff09;等安全路由…

38 KVM管理设备-管理虚拟机USB

文章目录 38 KVM管理设备-管理虚拟机USB38.1 配置USB控制器38.1.1 概述38.1.2 注意事项38.1.3 配置方法 38.2 配置USB直通设备38.2.1 概述38.2.2 注意事项38.2.3 配置说明38.2.4 配置方法 38 KVM管理设备-管理虚拟机USB 为了方便在虚拟机内部使用USBkey设备、USB海量存储设备等…

蓝桥杯单片机基础模板一:动态数码管显示

蓝桥杯单片机有一些基础模块的写法&#xff0c;他是没有一定的公式模板的。 好比动态数码管扫描显示&#xff0c;原理就是快速地 传输段选和位选。 但因为电路上添加了74HC573芯片&#xff0c;导致了我们移植别处 51单片机的动态扫描代码 会出现诸多问题&#xff0c;比如闪烁…

期末学习总结模板

期末学习总结精选篇1 转眼间研究生的生活已经有一学期了&#xff0c;感觉才参加复试没多久&#xff0c;回头想想&#xff0c;这一年过的真快&#xff0c;因为生病&#xff0c;耽误了很多时间&#xff0c;收获太少&#xff0c;遗憾太多。 本学期的收获&#xff1a; 1、暑假里看了…

Elasticsearch文件存储

分析Elasticsearch Index文件是如何存储的&#xff1f; 主要是想看一下FST文件是以什么粒度创建的&#xff1f; 首先通过kibana找一个索引的shard&#xff0c;此处咱们就以logstash-2023.05.30索引为例 查看下shard分布情况 GET /_cat/shards/logstash-2023.05.30?vindex …

AtCoder Beginner Contest 303——A-E题讲解

蒟蒻来讲题&#xff0c;还望大家喜。若哪有问题&#xff0c;大家尽可提&#xff01; Hello, 大家好哇&#xff01;本初中生蒟蒻讲解一下AtCoder Beginner Contest 303这场比赛的A-E题&#xff01; A - Similar String 原题 Problem Statement Two characters x x x and y…

Python IDLE介绍

目录 IDE&#xff08;集成开发环境&#xff09;是什么 Python IDLE使用方法详解 Python IDLE常用快捷键 IDE&#xff08;集成开发环境&#xff09;是什么 IDE 是 Integrated Development Environment 的缩写&#xff0c;中文称为集成开发环境&#xff0c;用来表示辅助程序员…

一、Fuzzing速成之AFL实战

文章目录 一、Fuzzing基本知识1、什么是Fuzzing?2、Fuzzing运行流程 二、Fuzzing实战1、下载AFL压缩包2、安装AFL3、Fuzzing 一、Fuzzing基本知识 1、什么是Fuzzing? 维基百科将模糊测试定义为&#xff1a;     模糊测试 &#xff08;fuzz testing, fuzzing&#xff09;…

【Python 文本挖掘】零基础也能轻松掌握的学习路线与参考资料

Python文本挖掘是利用Python语言和相关文本挖掘工具对大量文本数据进行分析和挖掘的过程。Python在文本挖掘方面广泛应用于自然语言处理、情感分析、主题建模、关键词提取等领域。 学习Python文本挖掘需要掌握Python编程基础、数据分析和可视化、自然语言处理、机器学习等知识…

Flutter:功能型组件(3)- 拖拽组件、缩放平移组件

拖拽组件 拖拽组件包含 Draggable、LongPressDraggable 和 DragTarget。 Draggable、LongPressDraggable 为可拖拽的组件&#xff0c;LongPressDraggable 继承自Draggable&#xff0c;因此用法和 Draggable 完全一样&#xff0c;唯一的区别就是 LongPressDraggable 触发拖动的…

nginx添加nginx-sticky-module模块步骤

nginx-sticky-module模块是nginx实现负载均衡的一种方案,和ip_hash负载均衡算法会有区别的 ip_hash 根据客户端ip将请求分配到不同的服务器上.sticky 根据服务器个客户端的cookie,客户端再次请求是会带上此cookie,nginx会把有次cookie的请求转发到颁发cookie的服务器上. 安装…

AI工具合集!一共600+覆盖全行业,除了ChatGPT,那你也会喜欢这些其他的AI工具

如果你喜欢ChatGPT&#xff0c;那你也会喜欢这些其他的AI工具。 AI正在改变我们的工作方式&#xff0c;我不想错过充分利用它的机会&#xff0c;所以我尝试了一系列AI工具来节省时间&#xff0c;提高我的工作效率。 这里有个集合了600ai工具的合集包。 序号AI工具名称AI分类A…