如何优雅的使用 IDEA Debug 进行调试

news2025/1/18 8:38:26

如何优雅的使用 IDEA Debug 进行调试

Debug 是我们在开发过程中经常会使用到的一种排查问题的手段,我们用它来定位分析异常的出现,以及程序在运行中参数的变化。

IDEA 本身具有很强的调试功能,掌握 IDEA 的一些 Debug 技巧,对我们开发和排查问题的效率会有很大的提升

1、IDEA Debug 基本用法

以 Debug 模式启动程序

在 IDEA 中以 Debug 模式启动程序,Windows 系统用户使用快捷键 shift+F9

请添加图片描述

打断点进行调试

在左边行号的地方单击左键就可以打上断点,再次点击可以取消,当我们以 Debug 模式启动后,程序运行到断点位置会被阻塞
请添加图片描述

2、条件 Debug

条件断点在满足某个条件时阻塞,否则直接运行

2.1使用场景

在遍历某个集合时,我们可以指定条件,在满足条件时进入断点进行调试。或者在方法的入口设置,当入参满足条件时进行调试

2.2 使用方法

在断点处右键,在出现的弹框中输入条件表达式
在这里插入图片描述

设置后原来的红色圆点会增加一个小问号
在这里插入图片描述

2.3 使用效果

运行程序,在满足条件表达式的时候进入了断点

在这里插入图片描述

3、计算表达式

计算表达式主要用来查看或者设置表达式的值,计算表达式可以执行输入的代码块

3.1 使用场景

当断点执行到某个条件,条件表达式是一个方法的时候,我们可以在计算表达式中直接调用该方法,查看返回值。也可以给给当前变量赋值,来满足条件继续调试

3.2 使用方法

点击 Debug 窗口的 Evaluate Expression... 按钮,或者使用快捷键 Alt + F8
在这里插入图片描述

3.2.1 调用方法

可以在 Expression 输入框中直接输入代码调用方法
在这里插入图片描述

3.2.2 变量赋值

可以在打开的计算表达式窗口直接修改变量的值在这里插入图片描述
也可以在控制台的变量区 Variables(变量区可以查看当前断点之前的当前方法内的变量。) 中给变量赋值:
在这里插入图片描述

4、方法断点

方法断点指将断点打在某个方法上,执行该方法时程序被阻塞

4.1 使用场景

在类的方法上打断点后,断点呈现为菱形,程序在执行到方法的时候会自动阻塞
在这里插入图片描述
面对陌生的代码可能会遇见某个接口有多个实现类,我们不清除代码逻辑走的具体是哪个实现类,将断点打在方法上,程序会在运行到某个实现类的时候停下
在这里插入图片描述

5、字段断点

字段断点将断点打在类的字段上,字段上的断点呈现为眼睛状

5.1 使用场景

在这里插入图片描述
右键点击断点可以设置字段是 访问/修改 断住
在这里插入图片描述

5.2 使用效果

默认会阻塞字段修改,在程序运行到修改字段的时候断住
在这里插入图片描述

6、异常断点

异常断点在程序抛出指定异常的时候阻塞

6.1 使用场景

如果程序运行中抛出异常,我们没有日志记录异常信息,可以使用异常断点来排除问题

6.2 使用方法

在 debug 控制台左侧找到 View Breakpoints... 按钮
在这里插入图片描述
在弹出框中新增断点,断点类型选择异常类型断点
在这里插入图片描述
在这里插入图片描述

6.3 使用效果

在类上是没有打断点的,但由于我们在 Breakpoints 中设置了异常类型为 java.lang.NullPointerException 的断点,我们的程序在运行中出现异常的时候会自动断住
在这里插入图片描述

7、线程断点

打断点调试时不阻塞全部线程,多线程情况下只阻塞一个线程

7.1 使用场景

IDEA Debug 打断点调试时默认阻塞全部线程,当前调试完成后才会继续执行其它线程,远程 Debug 时为了不阻塞所有请求使用

7.2 使用方法

右键点击断点处,可以选择 SuspendALL 阻塞全部线程 或者 Thread 阻塞一个线程
在这里插入图片描述

7.3 使用效果

Debug 控制台显示当前阻塞线程,不影响其它线程请求,可以在控制台处切换线程
在这里插入图片描述

8、增加日志

在程序断点处增加日志

8.1 使用场景

在程序开发过程中会增加一些日志方便调试,这些冗余的日志不需要提交的时候使用

8.2 使用方法

打开 Debug 控制台的 View breakpoints... 界面,在 Evaluate and log 输入框中输入日志表达式
在这里插入图片描述

8.3 执行效果

在断点处会在控制台打印日志
在这里插入图片描述

9、强制执行

可以在调试中抛出指定的异常,或者强制从某个方法返回结果

9.1 使用场景

  • 强制抛出异常在查看代码对异常的处理时使用
  • 强制返回可以自定义返回值

9.2 使用方法

运行程序,在 Debug 控制台右键点击栈帧,可以选择 Throw Exception 或者 Force Return
在这里插入图片描述

9.2.1 强制返回结果

点击 Force Return,设置返回结果为 true,可以看到控制台上显示的是自定义的返回值
在这里插入图片描述
在这里插入图片描述

9.2.2 抛出异常

点击 Throw Exception,设置抛出的异常,可以看到手动抛出的异常信息
在这里插入图片描述
在这里插入图片描述

10、程序启动 Debug

10.1 使用场景

在程序初始化的时候进行 Debug,而不是程序成功运行后断点调试

10.2 使用方法

JDWP(Java Debug Writ Protocol)Java 调试协议参数,我们可以使用 jdwp 命令来进行 Debug

使用 java -agentlib:jdwp=help 可以查看 jdwp 命令

java -agentlib:jdwp=help
               Java Debugger JDWP Agent Library
               --------------------------------

  (see http://java.sun.com/products/jpda for more information)

jdwp usage: java -agentlib:jdwp=[help]|[<option>=<value>, ...]

Option Name and Value            Description                       Default
---------------------            -----------                       -------
suspend=y|n                      wait on startup?                  y
transport=<name>                 transport spec                    none
address=<listen/attach address>  transport spec                    ""
server=y|n                       listen for debugger?              n
launch=<command line>            run debugger on event             none
onthrow=<exception name>         debug on throw                    none
onuncaught=y|n                   debug on any uncaught?            n
timeout=<timeout value>          for listen/attach in milliseconds n
mutf8=y|n                        output modified utf-8             n
quiet=y|n

服务端应用启动参数

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8080 -jar ***.jar

本地使用远程 Debug 连接

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

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

相关文章

【JS】原生js实现矩形框的绘制/拖动/拉伸

1、要点及功能描述 通过js监听mouse事件来实现矩形框的绘制&#xff0c;再通过区分点击的是边角还是其他位置来实现矩形框的拉伸和拖动&#xff0c;并且在拖动和拉伸时&#xff0c;都做了边界限制&#xff0c;当拉伸或拖动 到边界时&#xff0c;就不能继续拉伸拖动了。当然在相…

7个实用有效的shopify运营策略,跨境电商卖家必知

关键词&#xff1a;shopify运营、跨境电商卖家 您的Shopify 在线商店是使用当今最好的平台之一构建的。2022 年第二季度&#xff0c;Shopify 在美国电子商务平台中占据最大市场份额&#xff0c;约占美国所有在线业务的 32%。 这也意味着电子商务品牌之间的竞争比以往任何时候都…

【图像融合】基于matlab DSIFT多聚焦图像融合【含Matlab源码 2224期】

⛄一、SIFT配准简介 1 算法概述 在实时系统中&#xff0c;算法的输入为相机数据流&#xff0c;当前输入的图像与上一张相似度很高时应不参与融合&#xff0c;由于在体视显微镜下序列图像存在较大程度的偏移&#xff0c;所以融合前还需要进行图像配准&#xff0c;配准完成后再进…

安杰思提交注册:预计2022年度收入不低于3.5亿元,同比增长15%

11月16日&#xff0c;杭州安杰思医学科技股份有限公司&#xff08;下称“安杰思”&#xff09;在上海证券交易所科创板提交招股书&#xff08;注册稿&#xff09;。据贝多财经了解&#xff0c;安杰思于2022年6月24日在科创板递交上市申请材料&#xff0c;2022年11月7日获得上市…

面试--线程池的执行流程和拒绝策略有哪些?

一. 执行流程 聊到线程池就一定会聊到线程池的执行流程, 也就是当有一个任务进入线程池之后, 线程池是如何执行的? 想要真正的了解线程池的执行流程&#xff0c;就得先从线程池的执行方法 execute() 说起, execute() 实现源码如下: public void execute(Runnable command)…

2.10.2版本的青龙升级2.10.13及2.11.3版本的教程

重要提醒&#xff1a; 这个教程仅限使用我下面这个命令搭建的青龙面板使用 docker run -dit \--name QL \--hostname QL \--restart always \-p 5700:5700 \-v $PWD/QL/config:/ql/config \-v $PWD/QL/log:/ql/log \-v $PWD/QL/db:/ql/db \-v $PWD/QL/scripts:/ql/scripts \-…

【消息队列笔记】chp3-如何确保消息不丢失

一、检测消息是否丢失 我们要保证消息的可靠交付&#xff0c;首先就要知道消息是否丢失了。如何做到这一点呢&#xff1f; 对于IT基础设施比较完善的公司&#xff0c;可以使用分布式链路追踪系统来追踪每一条消息。如果没有这样的系统&#xff0c;可以使用消息的有序性来验证…

圆角矩形不是圆:圆角的画法和二阶连续性

本文中的所有重要图片都会给出基于Matplotlib的Python绘制代码以供参考 引言 如果在百度搜索圆角矩形的画法&#xff0c;那么多数结果都会告诉你&#xff0c;就是把一个普通矩形的拐角换成相切的 14\frac{1}{4}41​ 圆弧&#xff0c;就像 引文1 和 引文2 说的那样。然而&#x…

网络规划设计与综合布线技术详解

一、网络工程概述 1、计算机网络及其组成 计算机网络是现代通信技术与计算机技术相结合的产物。 随着计算机网络本身的发展,人们认为:计算机网络是把地理位置不同、功能独立自治的计算机系统及数据设备通过通信设备和线路连接起来,在功能完善的网络软件运行支持下,以实现…

springboot+vue实现excel的导出

首先是springboot对数据的处理 依赖的导入 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>RequestMapping("/exportExcel") public R exportR…

【SpringBoot项目】SpringBoot项目-瑞吉外卖【day01】

文章目录前言软件开发整体介绍软件开发流程瑞吉外卖项目介绍项目介绍产品原型展示技术选型功能架构角色开发环境搭建数据库环境搭建maven项目搭建设置静态资源映射后台登录需求分析代码开发功能测试后台退出需求分析代码开发功能测试&#x1f315;博客x主页&#xff1a;己不由心…

JVS低代码如何实现复杂物料编码?

日常业务过程中&#xff0c;存在大量的编码&#xff0c;例如订单的流水号&#xff0c;复杂的物料编码&#xff0c;学生证号等等场景&#xff0c;那么通过JVS如何去实现各种编码&#xff1f; 为了让使用者使用尽量简单&#xff0c;我们编码分为简单配置的编码和复杂配置的编码。…

[附源码]java毕业设计家校通信息管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

docker stats查询容器状态显示异常有模线

docker stats 命令用来显示容器使用的系统资源。 默认情况下&#xff0c;stats 命令会每隔 1 秒钟刷新一次输出的内容直到你按下 ctrl c。 输出详情介绍&#xff1a; CONTAINER ID 与 NAME: 容器 ID 与名称。 CPU % 与 MEM %: 容器使用的 CPU 和内存的百分比。 MEM USAGE…

Java基础之《netty(1)—netty介绍》

一、介绍 1、netty是由JBOSS提供的一个java开源框架&#xff0c;现为github上的独立项目。 2、netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;可以快速开发高性能、高可靠的网络IO程序。 3、netty主要针对在TCP协议下&#xff0c;面向clients端的高并发应用&…

【python3】4.文件管理

2022.11.16 本学习内容总结于莫烦python:4.文件管理 https://mofanpy.com/tutorials/python-basic/interactive-python/read-write-file4 文件管理 4.1 读写文件 均是用特殊字符open 4.1.1 创建文件 f open("new_file.txt", "w") # 创建并打开 f.wr…

进入数字化供应链高潮期,与IBM咨询共创无边界竞争力

供应链领域的国际专家马丁克里斯托弗在30年前就提出“未来的竞争不再是企业和企业之间的竞争&#xff0c;而是供应链之间的竞争。”近几年来&#xff0c;基于工业4.0技术的供应链4.0开始进入业界的视野&#xff0c;2020年开始的疫情让全球供应链结束了长期稳定状态而进入VUCA&a…

针对谷氨酰胺运输体的小分子抑制剂

精准癌症治疗手段 在运输体水平靶向谷氨酰胺代谢 ACST2 蛋白是谷氨酰胺进入癌细胞的主要转运蛋白。在肺癌、乳腺癌、结肠癌等癌症中&#xff0c;ACST2 蛋白水平的上调与患者存活率有关。当抑制 ACST2 基因表达时&#xff0c;会显著抑制癌细胞生长。ASCT2 水平升高与多种癌症的…

【支付】支付安全

这里写目录标题1. 加密 - 对称加密与非对称加密1.1 对称加密1.2 非对称加密1.3 对称加密与非对称加密区别2. 身份认证公钥加密&#xff0c;私钥解密&#xff08;加密信息&#xff09;私钥加密&#xff0c;公钥解密&#xff08;身份认证&#xff09;3. 摘要算法与数据完整性3.1 …

深度剖析 Vue3 在浏览器的运行原理

上一讲我们学习了 Vue 响应式的大致原理&#xff0c;响应式就是可以把普通的 JavaScript 对象包裹成响应式对象&#xff0c;这样&#xff0c;我们对对象做的修改&#xff0c;响应式都能够监听到&#xff0c;并且执行 effect 内部注册的函数来执行数据修改之后的效果 那今天我就…