学会IDEA这些断点操作,生产问题解决的越来越快了

news2025/4/13 20:13:01

文章目录

  • IDEA断点高级用法
    • 1、断点类型
      • 1)行断点(line breakpoints)
      • 2)字段断点(field breakpoints)
      • 3)方法断点(method breakpoints)
        • 1> 加载类名上的断点
        • 2> 正常方法断点
        • 3> 通过匹配符批量添加方法断点
      • 4)异常断点(exception breakpoints)
    • 2、断点控制
      • 1)断点删除
      • 2)断点静音
    • 3、断点属性配置
      • 1)Enabled
      • 2)Suspend
      • 3)Condition
      • 4)Log
        • 效果展示
      • 5)Remove once hit
      • 6)Disable until hitting the following breakpoint
      • 7)Pass count
    • 4、断点的状态
      • 对应的图标
    • 5、Stream的调试
    • 6、远程debug
  • 使用建议
    • IDEA查看类实例所占内存

IDEA断点高级用法

1、断点类型

1)行断点(line breakpoints)

在指定代码行设置断点,程序在到达设置断点的代码行时暂停程序。这种类型的断点可以设置在任何可执行的代码行上。

一般我们在代码的左侧数字栏直接鼠标单机设置的断点就是行断点;

在这里插入图片描述

2)字段断点(field breakpoints)

当指定的字段被读取或修改时会进入端点,暂停程序。

  • 如果在一个复杂的过程结束时,某个字段出现了明显的错误值,设置一个字段观察点可能有助于确定故障的来源。

在定义字段的代码行的 左侧数字栏直接鼠标单机设置的断点就是字段断点;

在这里插入图片描述

鼠标右键点击该断点图标 ,弹出该断点配置,会有Field access和Field modification选项;这两个选项项是字段类型断点特有的,分别对应 访问该字段、修改该字段触发断点,两项同时选中,则访问、修改该字段都会触发断点。

默认只有修改字段时才会触发断点。

在这里插入图片描述

3)方法断点(method breakpoints)

在进入或退出指定的方法或其实现之一时暂停程序;允许我们检查该方法的进入/退出条件。

在这里插入图片描述

1> 加载类名上的断点

当断点加在class类名这一行,并且该类中没有编写构造函数(只有默认无参构造函数)时,当调用默认无参构造函数时会触发此断点,程序挂起;所以虽然这个断点的图标是行断点类型图标,但实际上其属于方法类型断点。

在这里插入图片描述

2> 正常方法断点

在方法名这一行加断点,鼠标右键点击该断点图标 ,弹出该断点配置,会有Emulated、Method entry、Method exit选项,此选项是方法类型断点特有的。

  • Emulated勾选中,会将方法断点优化成方法中第一条和最后一条语句的行断点,这样会优化调试的性能,因此在IDE中会默认选中。

在这里插入图片描述

3> 通过匹配符批量添加方法断点

鼠标右键点击某一个方法断点图标,然后点击More,会弹出断点列表页;

在这里插入图片描述
在这里插入图片描述

在断点列表页中,做如下操作:

  1. 点击+号,弹出下列选择框;
    在这里插入图片描述
  2. 选择Java Method Breakpoints,弹出如下窗口;
    在这里插入图片描述

Class pattern 和 Method name中输入的匹配符规则示例如下:

ClassMethodResult
*print匹配所有类的 print() 方法
DebugTest*匹配 DebugTest 类中的所有方法
DebugTestset*匹配 DebugTest 类中的所有方法名set开头的方法

4)异常断点(exception breakpoints)

当程序抛出指定异常时会激活异常断点,与行断点不同,异常断点不需要与源代码映射,因为异常断点应用程序级别的。

异常断点分为两种:

  • 一种是Any Exception,任意Throwable异常被捕获或未被捕获就会触发断点;
  • 另一种是指定类型的异常及其该异常子类被捕获或未被捕获会触发断点;

异常断点的添加方式:在断点列表页中,做如下操作:

  1. 点击+号,弹出下列选择框;
    在这里插入图片描述
  1. 选择Java Exception Breakpoints,弹出如下窗口;
    在这里插入图片描述

假如我们选择了java.lang.NullPointerException:

在这里插入图片描述

异常断点有两个特有的配置:Caught exceptionUncaught exception 选项。

  • Caught exception选项选中时,当指定的异常被捕获时,触发断点程序挂起;
  • Uncaught exception选中时,当指定的异常未被捕获时,触发断点程序挂起;

2、断点控制

1)断点删除

1> 所有类型的断点:在断点列表中用 - 号可以移除相应的断点;

在这里插入图片描述

2> 快捷移除:行位置鼠标左键单击即可移除(异常断点除外)。

2)断点静音

如果某些时候不需要在断点处停留一段时间,可以将断点静音。这样就可以在不离开调试器会话的情况下恢复程序的正常运行。之后,可以解除断点的静音,继续DEBUG调试。

断点静音会静音所有断点。

在这里插入图片描述

3、断点属性配置

鼠标操作:右键断点;

在这里插入图片描述

再点击:More(Ctrl+Shift+F8),进入断点列表;

在这里插入图片描述

断点有许多属性配置,如上图所示;下面对各个属性的作用以及使用进行说明。

1)Enabled

表示是否启用该断点,选中表示启用,取消选中表示不启用。

2)Suspend

Suspend属性除了自身是否勾选之外,还有两个选项:All、Thread;

  • 当断点的 Suppend 属性被勾选,触发该断点时,程序挂起;当该属性未选中时,程序触发该断点时,程序不会挂起,不勾选Suspend属性的操作,常用于输出一些表达式结果日志。
  • 当断点的 All 属性被勾选,触发该断点时,会挂起所有线程;
  • 当断点的 Thead 属性被勾选,触发该断点时,只会挂起触发该断点的那个线程,不影响其他线程;
    • 实际生产实践中,可用于调试多线程并发的问题。

3)Condition

输入一段能获得true或false的表达式,程序运行到断点处,且表达式条件为true才会触发断点。

比如下图:当stop属性为true时才触发断点;

在这里插入图片描述

4)Log

Log有三个属性选项经常配合 Suppend 属性不勾选时 一起使用,用于在不挂起程序的情况下,输出一些想要的日志信息;

  • Breakpoint hit message :控制台输出触发断点的日志信息;
    • 比如:Breakpoint reached at com.saint.debug.DebugTest.print(DebugTest.java:10)
  • Stack trace:输出触发断点时的堆栈信息;
    • 比如:
      Breakpoint reached
      	at com.saint.debug.DebugTest.print(DebugTest.java:10)
      	at com.saint.debug.DebugTest.main(DebugTest.java:15)
      
  • Evaluate and log:计算表达式结果并输出表达式结果到控制台;
    • 表达式的计算基于断点所在行的上下文,表达式的语句可以是字符串字面量、方法调用、也可以是多行语句块;

效果展示

断点配置如下:在不挂起程序的情况下输出日志
在这里插入图片描述

DEBUG后的控制台输出:

在这里插入图片描述

5)Remove once hit

是否在断点触发后移除该断点,后续不再触发;

在这里插入图片描述

6)Disable until hitting the following breakpoint

选择的另一个断点被触发后,该断点才启用。

在这里插入图片描述

7)Pass count

勾选中并输入一个正整数N,N>=1,那么程序会每N次命中断点才会触发挂起。

如果同时设置了condition 与 pass count 属性,ide会优先判断 condition 表达式,再判断 pass count 是否满足。

比如:Pass count 设置为15,每15次命中断点才会触发断点,挂起程序。

在这里插入图片描述
DEBUG测试效果:
在这里插入图片描述

4、断点的状态

状态描述
Verified启动调试器会话后,调试器会检查在技术上是否可以在断点处暂停程序。
Warning如果是,调试器将该断点标记为已验证。如果在技术上可以在断点处暂停程序,但是有相关的问题,调试器会给你
Invalid一个警告。例如,这可能发生在无法在某个方法的实现处暂停程序的情况如果在技术上不可能在断点处暂停程序,调试器会将其标记为无效。最常
Inactive/dependent下。见的原因是该行没有可执行的代码。当一个断点被配置为禁用,直到另一个断点被击中,而这还没有发生时,
Muted该断点被标记为非活动/依赖性。所有的断点都是暂时不活动的,因为它们已经被静止了。
Disabled该断点暂时不活动,因为它已被禁用。
Non-suspending为该断点设置了暂停策略,因此,当击中该断点时不会暂停执行。

对应的图标

在这里插入图片描述

5、Stream的调试

这个看看就行,IDEA做的不怎么好,实际几乎也不用。

1> 在stream()方法处打个行断点;
在这里插入图片描述
2> 查看 Steam Trace;
在这里插入图片描述

6、远程debug

一般我们仅在开发环境和测试环境允许remote debug,UAT、Prod环境肯定不允许。

具体的步骤;

1> 启动远程服务时加入如下参数:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar xxx.jar

2> 本地打开相应项目的 Edit Configurations,新增一个Remote

在这里插入图片描述
在这里插入图片描述
JVM参数添加 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
在这里插入图片描述

3> Idea中启动remote,并打断点调试。

使用建议

  • 使用非暂停的日志断点进行“printf”调试,而不是在代码中插入打印语句。
    • 为处理调试日志信息提供了一种更灵活和集中的方式。
    • 场景: 所有需要打印的地方,生产上禁止 System.out.print();
  • 测试程序是否有并发性问题
    • 发现多线程程序在并发方面是否健壮的一个好方法是使用断点,在碰到时只暂停一个线程。
    • 停止一个线程可能会揭示出应用程序设计中的问题,否则这些问题就不会显现出来。

IDEA查看类实例所占内存

IDEA在比较高的版本提供了查看类实例所占的保留内存大小能力,笔者的IDEA版本没那么高,这里简单提一下。

  • 对于每个类的实例,你可以计算它的保留大小。保留大小是指对象本身和它所引用的所有对象以及没有被其他对象引用的对象所占据的内存量。
  • 估算重型单体或从磁盘上读取的数据(例如,复杂的JSON)的内存占用时,可能很有用。
  • 决定使用哪种数据结构时(例如,ArrayList与LinkedList),它也很有用。

使用方式:运行应用程序之前,确保在设置/首选项|构建、执行、部署|调试器中启用附加内存代理选项。

请添加图片描述

在查看类的实例时,右键单击一个实例并单击计算保留大小。

请添加图片描述

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

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

相关文章

xss-labs(WriteUp)

xss-labs 先讲讲什么是跨站脚本攻击XSS(Cross Site Scripting) XSS原理 本质上是针对html的一种注入攻击,没有遵循数据与代码分离的原则,把用户输入的数据当作代码来执行 xss跨站脚本攻击是指恶意攻击者往Web页面里插入恶意脚本代码(包括当…

redis之codis和redis cluster对比

写在前面 codis和Redis cluster 都是Redis的集群方案,本文就一起来看下。 1:codis的组件和架构 codis的组件有4个,如下: codis server:基于redis进行了二次开发的组件,负责数据的读写 codis proxy&…

Halcon图像拼接

图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要。 如按下图是将两张楼房图片拼接成一个图像。…

QT 学习笔记(九)

文章目录一、事件的接收和忽略1. 准备工作2. 接收和忽略二、event() 函数1. 简介2. 实例演示3. 总结三、事件过滤器四、总结(细看)1. 知识点汇总2. QT 的事件处理五、事件、事件的接收和忽略、event() 函数和事件过滤器代码1. 主窗口头文件 mywidget.h2.…

英语文本转语音软件哪个好?分享三个新手也能学会的工具

大家平时都是怎么学习英语的呢?课上老师让我们熟悉单词意思、巩固语法、多练阅读理解;其实通过练习听力来加强语感也很重要。很多小伙伴的阅读理解很好,但是听力却跟不上。这里教大家一个小技巧,就是在做阅读理解的时候&#xff0…

第十章TomCat详解

文章目录Tomcat的部署和启动Tomcat扮演的角色①对外:Web服务器②对内:Servlet容器深入理解为什么需要TomCat从目的开始出发遇到的问题总过程部署前提解压TomCat的目录文件启动Tomcat并访问首页如何部署一个项目访问对应的web资源专业版IDEA创建一个JavaW…

力扣(718.1143)补9.12

718.最长重复子数组 这题真的想不到。 看图的话会好懂很多。 class Solution { public int findLength(int[] nums1, int[] nums2) { int nnums1.length; int n2nums2.length; int[][] dpnew int[n1][n21]; int result0; for(int…

【区块链-智能合约工程师】第二篇:Solidity入门

文章目录Solidity极简入门HelloWorld数值类型三种函数类型函数输出变量作用域引用类型参考文章:一文速览2022十大智能合约开发工具 资料地址:WTF学院 Solidity极简入门 HelloWorld remix:在线智能合约开发IDE(Integrated Deve…

DBCO-PEG-Aminooxy, Aminooxy-PEG-DBCO,氨甲基聚乙二醇环辛炔

DBCO-PEG-Aminooxy , Aminooxy-PEG-DBCO,二苯并环辛炔-聚乙二醇-氨甲基,氨甲基聚乙二醇环辛炔 Product specifications: 1.CAS No:N/A 2.Molecular weightMV:1000,2000,34000&#x…

小侃设计模式(十八)-发布订阅模式

1.概述 发布订阅模式又叫观察者模式(Observer Pattern),它是指对象之间一对多的依赖关系,每当那个特定对象改变状态时,所有依赖于它的对象都会得到通知并被自动更新,它是行为型模式的一种。观察者模式内部…

被吹爆的JVM笔记,一招教会什么是JVM调优,资深架构师强推!

面试经常被问 JVM 如何调优?这个问题该怎么回答?没有实际调优经验怎么办? 一般面试时问JVM调优,主要是因为,这个技术并不是懂了Java就能自然懂的,需要明白一些底层原理,有一些深度。所以比较适合…

传奇客户端文件介绍注解教程,GM必备知识

传奇客户端文件介绍注解教程,GM必备知识 很多朋友架设微端,或者说修改传奇版本素材方面的内容的时候对于客户端很懵逼! 尤其是新手朋友他并不知道传奇客户端里面哪个文件是对应什么内容的! 今天我们将这些发出来分享给支持奇速的朋…

高压放大器在IDE压电元件及其在仿生翼中的应用

实验名称:IDE压电元件及其在仿生翼中应用研究 研究方向:仿生学 测试目的: 优化IDE压电元件结构和组分出发,目的是为了获得大驱动位移、综合性能良好的IDE驱动件。着重研究IDE压电元件的力学和电学性能、驱动特性和在仿生翼上的集成…

LVGL学习笔记(一)--- 环境搭建

LVGL全程LittleVGL,是一个轻量化的,开源的,用于嵌入式GUI设计的图形库。并且配合LVGL模拟器,可以在电脑对界面进行编辑显示,测试通过后再移植进嵌入式设备中,可以高效地进行开发。 一.嵌入式设备的移植 L…

企业请体育冠军明星代言,为何要在年前邀请

行业形势好,要把握住消费升级的机会;行业调整时,要抓住结构性增长的机会。实力背书、冠军代言、让品牌成为品类创新,中小型这几个概念与品牌自身的卖点,每一个放在光中小型企业的品牌上都能独当一面,当一款…

C/C++ 内存分布---变量所在哪个内存区域以及变量所占空间大小是多少?

C/C内存区域划分: 变量所在哪个内存区域以及变量所占空间大小是多少? int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const …

基于JavaFX+Mysql实现(PC)足球联赛评分系统【100010048】

一、引言 1. 编写目的 本文档是概要设计文档的组成部分,编写数据库设计文档的目的是:明确数据库的表名、字段名等数据信息,用来指导后期数据库脚本的开发。本文档的读者对象是需求人员、系统设计人员、开发人员、测试人员。 2. ### 术语表 …

GPT3动口,RT-1动手,智能机器人开卷; 代码开源!

机器学习 (ML) 研究的多个子领域(例如计算机视觉和自然语言处理)的最新重大进展是通过一种共享的通用方法实现的,该方法利用大型、多样化的数据集和能够有效吸收所有数据的表达模型。尽管已经有各种尝试将这种方法应于机器人技术,…

绘制雪夜圣诞树并封装为小程序

绘制雪夜圣诞树并封装为小程序 使用turtle绘制一颗雪夜圣诞树,然后封装成exe小程序送给你的朋友吧! PS:只能在windows运行。 转载注明本文链接和作者 先看效果图: 绘制雪夜圣诞树 由于代码有三百多行,我放在下面的两…

Web前端105天-day45-DOM

DOM01 目录 前言 一、DOM 二、DOM树 三、class 总结 前言 DOM01学习开始 一、DOM DOM: Document Object Model 文档 : HTML代码 -- 超文本标记语言对象 : 网页真正显示的是 HTML 转换出来的 对象类型 -- document模型 : 固定的规则 -- 代表把 HTML代码 转 JS对象网页真…