当前位置: 首页 > news >正文

IDEA的DEUG模式技巧和使用

前言

其实,debug模式,我在前面已经用了很多了,但是还是有一些技巧上的东西,来帮助我们更好的去测试,因此,本次文章就这个来进行一个汇总使用

基础

最最基础构成DEBUG模式调试的,我觉得应该是有两块,断点步进
断点
断点的表现,是一个圆圆的红点
在这里插入图片描述
在对应需要停留的代码行进行鼠标左键就会添加
另外,

在一个方法内部其实只需要在方法的最开始部分进行点一个点就可以通过步进停留执行完该方法所有的代码块

步进
在这里插入图片描述

以上不同的箭头都属于步进,那么他们分别都是怎么使用?
从左往右分别代表的含义如下:
Step over:程序往下执行一行

Step into:进入方法内,可以进入自定义方法或三方库方法,JDK方法无法进入

Force step into:强制进入方法内,一般 Step into 进不去时可以使用

Step out:退出方法,跟(force)step into 配合使用

Drop Frame:当我们 Debug 从 A 方法进入 B 方法时,通过降帧(退帧)可以返回到调用 B 方法前,这样我们就可以再一次调用 B 方法。
此外点击左边三角的地方
可以跳到下一个断点处或者说恢复运行
在这里插入图片描述

作用如下:
Resume Program:恢复运行程序,运行到下一个断点的地方

那么,这些就是一个最最基础的debug的使用了

技巧

断点

上面,我们说的断点,其实是断点的一种,断点还有分多种
行断点(Line Breakpoints)
图标:红色圆形

功能:最常用的断点,在断点所在行进行暂停。

理论上只要有行断点和上面的基本操作,就可以完成大部分的 Debug 调试了,但是很多场景下只使用这些功能,调试是很低效的

方法断点(Method Breakpoint)
图标:红色菱形
在这里插入图片描述

功能:在方法入口(entry)和出口(exit)都会自动暂停。在方法入口暂停可以让我们从头调试整个方法,
而在方法出口处暂停可以让我们看到方法执行完毕时,方法内各个变量的数据情况。

有时候我们的一个接口会存在很多实现类,我们短时间内难以分析究竟是运行到了哪个实现类中,这个时候就可以使用方法断点,我们将断点打在接口方法上,运行到该方法时,会自动跳到实际执行的实现类,无需通过上下文环境去分析是哪个实现类。

缺点:复杂的项目中可能会降低debug的执行速度


字段断点(Field Watchpoints)
图标:红色眼睛
在这里插入图片描述

功能:在字段发生变更(默认)或者被访问(需要额外设置)时暂停。

如果我们想知道某个属性在什么时候被修改,从入口处开始调试太麻烦,我们可以直接在字段上打上字段断点,这样字段被修改的时候就会自动暂停。

而如果我们想在字段被访问时也暂停,则可以右键字段断点,将【Field access】勾选上即可。


执行表达式(Evaluate Expression)

在我们的debug模式下有一个计算器
在这里插入图片描述
当我们运行到断点的时候,就可以打开计算器,执行还在这个生命周期内某个属性的最终结果
如:
在这里插入图片描述
我的这个项目中,有定义一个变量STUDENT,当执行到这里的时候就可以打开计算器计算STUDENT
在这里插入图片描述
如果,当执行完这一步,到下一步之后并没有这个变量,你是没办法去计算这个值的

当我们遇到循环或者需要查看某些属性的值的时候,这个就可以很好的帮助我们

断点条件(Condition)

当我们在断点进行鼠标右键的时候,是能够输入条件,当条件成立的时候,才会停在断点处。
在这里插入图片描述
这么做的好处是什么?
我们假设一个场景
有一个for循环,数据量有10000条,除了一条数据是A,其他数据都是B,你需要找到这个A停留观察它的情况
这个时候你总不能还是靠步进一步一步的点到我们需要找的数据吧?

甚至说数据量更多,十万、一百万呢?
那么这个时候,我们就可以在Condition条件一栏写上:

data = "A" (假设对应的字段属性是命名为data)

也就是对应的属性等于对应需要查找的值

结语

以上就是IDEA的DEBUG模式上的使用和技巧,如有新内容,会在本文章更新

相关文章:

  • PostgreSQL企业应用——Rust三剑客(pgx)
  • C++ 笔记
  • HBuilder包装iOS APP上App Store的详细过程
  • 1.4_9 Axure RP 9 for mac 高保真原型图 - 案例8 【动态面板】浏览、翻页、回弹
  • 火狐浏览器可以使用代理吗?火狐浏览器如何搭配易路代理使用?
  • nginx配置新的SSL证书后浏览器仍显示之前的旧SSL证书
  • JavaNIO——单线程(笔记)
  • SpringBoot工程中Dubbo多协议使用方式
  • 阿里首次开源 Java 10万字八股文,Github仅一天星标就超60K
  • 凯文凯利10条人生建议,送给迷茫的你!(上)
  • The DAO事件始末
  • 工业智能网关BL110应用之六: 支持PLC,Modbus,BACnet,电表等协议列表
  • Jackson公司蛋白质印迹指南丨样品制备
  • 数字IC必学之《Skill入门教程》
  • Operator 基础原理和概念
  • JS 中的深拷贝与浅拷贝
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Java IO学习笔记一
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java应用性能调优
  • springboot_database项目介绍
  • Vue2.x学习三:事件处理生命周期钩子
  • webpack入门学习手记(二)
  • 第十八天-企业应用架构模式-基本模式
  • 多线程事务回滚
  • 规范化安全开发 KOA 手脚架
  • 回顾 Swift 多平台移植进度 #2
  • 京东美团研发面经
  • 经典排序算法及其 Java 实现
  • 力扣(LeetCode)22
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 少走弯路,给Java 1~5 年程序员的建议
  • 我是如何设计 Upload 上传组件的
  • 延迟脚本的方式
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (译)计算距离、方位和更多经纬度之间的点
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Framework .NET Core与 .NET 的区别
  • .Net IOC框架入门之一 Unity
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .net打印*三角形
  • .Net接口调试与案例
  • .NET学习全景图