测试左移-快速玩转Debug

news2024/12/19 23:33:23

目录

背 景

学习的意义

玩 转 Debug

一、基本介绍

 二、断点设置

 三、启动调试

 四、调试技巧

 定 位 问 题

总 结


背 景

一段代码的问题产生阶段可以分为:编译期运行时

  • 编译期的代码可以由工具(idea、eclipse)在程序编码过程中提示错误,解决了语法上的标准问题
  • 运行时的代码在程序启动、运行过程中出现程序异常、逻辑异常的错误

当程序发生异常: 如返回结果不对、 没响应、抛异常、肉眼又发现不了的错误!通常这种情况我们就需要调试代码

学习的意义

QA同学通过学习debug,能够追踪代码的运行过程,快速熟悉代码实现和调用链路,扩展case的设计思路,同时从黑盒转向白盒,提高问题定位、精准case设计的能力。

玩 转 Debug

一、基本介绍

Debug视图

 常用按钮

按钮说明备注

定位当前断点位置用于不知道断点在哪的时候快速定位

步过:一行一行的向下运行代码,跳过方法

步入:一行一行的向下运行代码,不会走入系统类库的方法中,但是会走入自定义的方法中自定义方法 add(),如果调用了会直接进入

强制步入:一行一行的向下运行代码,会走入系统类库的方法中,也会走入自定义的方法中系统类库,例如.toString()

步出:跳出方法,回到调用处和强制步入相反

回退断点:回退后可以重新观察错过的数据加载的信息对于数据库已执行的的操作是无法回退的

运行至光标处:鼠标指在哪一行,就跳转到哪一行用的比较少

计算表达式使用表达式可以在断点调试阶段进行模拟操作

进入下一个断点如果没有下一个断点,直接运行到结束

结束程序

查看当前所有断点数据

禁用所有断点

断点分类(常用断点)

1、行断点

最常用的断点方式,一般用于某个方法内部逻辑能预估的位置进行断点,可以忽略上文过程中的链路

 2、方法断点

方法断点可直接作用在方法上面,如果不确定是哪个方法,可以直接断点到接口上,会自动找到对应的实现,要注意的是,接口上断点的标记是一个菱形

 3、属性断点

是打在属性上的,我们无需再getter setter方法上打断点,在属性上打上断点,就会出现一个小眼睛的标志

小眼睛右键可进行设置断点的触发类型:修改和访问

日常开发或者定位赋值问题的时候,可以通过这个属性断点方式来排查

 4、流断点

在使用lambda或者流操作时候,想要看见过程中做了些什么,可以通过流断点的方法,查看

这个按钮即可展示视图,在每个过程中做了什么动作

 二、断点设置

1、首先,我们找到需要断点的代码,根据上面断点分类,选择不同的断点类型,我们采用行断点,点击某行,进行断点标记

 2、对于本地单元测试,我们可以直接点击绿色的三角箭头->选择debug运行模式

 对于远程调试,我们可以选择idea右上角的小虫子,启动调试即可,和点击绿色三角箭头中的Debug Run效果一致远程调试需要注意的要点:

  • 本地的代码必须和远程服务器运行的代码保持一致
  • 远程调试不要在生产环境进行,否则在断点未关闭的情况下,会造成服务阻塞,严重的造成线上问题

 三、启动调试

我们以一个案例来演示学习Debug的意义

求1-10阶乘之和

1!+2!+3!+......+10! = 4037913

以下代码

在编译期:代码没有任何异常,但是运行结果和我们预期是不一致的,在没有日志的情况下,我们无法通过肉眼直接判断问题出在哪里,此时debug调试的作用就显现出来了

 阶乘调试

1、首先,标记断点,启动调试

可以在变量区很清楚的看见目前变量的结果

 2、使用【

】按钮进行一步步执行

可以发现 i=1 的情况下,阶乘之和sum变量值是正确的,继续执行

 3、继续【

】调试,i=2的情况下,阶乘之和=3,结果也是正确的,继续执行

 4、此时i=3执行,发现sum的值居然变成了15,正常的1!+2!+3!的阶乘之和应该是6此处就可以发现计算有问题,那么问题在哪呢,使用【

】重新运行加载

观察i=3的情况下变量的变化

 5、i=3的情况下,从图中可以看出S=2,计算21=2,J++再计算就是22=4,这里实际上就可以看出来问题,3的阶乘应该是123=6

而此处运算完结果是(21)+(22)+(2*3)=12,SUM=3,12+3=15

发现问题所在,long s =1 ,只在for循环外面定义了初始化的变量,每次都会累加而没有重置,每次计算s都是用累加的值进行计算,所以会出问题

 6、知晓问题结果后,我们修改代码,增加s在循环体中的重置,重新debug运行

在i=3的时候,可以发现s变量的结果符合预期

 7、释放代码,查看最终结果,和我们的预期值一致

此处也能够看出来debug调试在整个过程中排查问题、定位问题起到了关键的作用

 四、调试技巧

高效debug

1、断点-【条件判断】

在代码中,经常会遇见for循环,但是循环集合可能会很大,一步步的调试到我们想要的那个下标值,执行起来非常麻烦,那么这个时候就可以运用条件判断进行断点

例如在阶乘运算中,我不想一步步的执行很多遍才进入有问题的i==3,那么我可以在for循环的循环体中进行断点,通过右键断点,设置i的条件,在满足条件时,才停在断点处,否则直接运行。如下

 从图中可以很明显看出来直接debug的时候,i执行到了第三次后,才进行断点拦截,前面的都会直接执行不拦截,并且断点标记多了一个?号标记

 2、断点-【表达式计算】\

个人认为是idea调试里面最好用的功能,计算表达式有两个作用,都是在运行时作用

  • 查看表达式的值
  • 设置表达式的值

设置表达式的值

当前debug下,list=0,所以这个输出永远不会打印

 使用表达式计算,执行list.add后,返回结果是true,同时能看见size长度变更为1

这个时候再次向下执行,即可进入for循环的循环体中进行打印

 

 查看表达式的值

在一些复杂逻辑中,编码者会将多行代码调整为一行,提高了简洁性,但是降低了可读性,这个时候就可以使用表达式,将计算拆分出来一个个查看,可以更好的理解这一行代码表达的意思和计算的逻辑

 定 位 问 题

1、在程序运行日志中,有log抛出异常,通常你可以不需要任何思考,将错误拷贝后在代码中搜索,如有多个同样的,可以根据参数和日志打印内容进行筛选

 2、没有日志情况下怎么办,不知道入口处,那就只能通过抓包等手段获取请求的接口,然后在idea中查找对应的接口,在实现类的入口处进行断点;对代码有一定的阅读能力的测试,可以进行简单走读判断代码主体逻辑再进行断点标记,缩小范围

3、 在无法判断异常位置,并且代码逻辑又多的情况下,我们还可以通过多行断点标记的方式,直接配合

按钮,运行会直接跳入下一个断点中,上一个断点到下一个断点中间的代码都不会步入,如下

通过该方式,可以进行代码分块的情况下快速定位问题点

总 结

Debug能力是定位问题的一个手段,能够给QA同学带来更多的实践经验

  • 提高我们对业务逻辑和数据交互流程有更清晰的认知
  • 了解基本原理和使用,拓宽设计case的思路
  • 将代码学习融入到日常工作中,理论结合实践,能够快速提高自己的代码能力

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

在我的QQ技术交流群里(技术交流和资源共享,广告勿扰)

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

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

相关文章

面对对象。

1.类: 类:是对象共同特征的描述。 对象:是真实存在的具体实例。 先设计类,才能创建对象并使用。 pulic class 类名{1.成员变量(代表属性,一般是名词)2.成员方法(代表行为&#x…

达梦主备守护集群相关概念和基本原理介绍

DM数据守护一主一备或一主多备是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然灾害(地震、火灾)等极端情况下&#xff0…

思科交换机与路由器基础命令(一)

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、Cisco交换机的命令行模式: 1、用户模式 2、 特权模式 3、 全局配置模式 4、 接口模式 5、退回命令 二、帮助机制 …

20. 算法之回溯算法

1. 概念 回溯算法实际上一个类似枚举的深度优先搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回(也就是递归返回),尝试别的路径。 回溯的处理思想&#xff0c…

必备:音乐的魅力,一边听歌一边练习英语!

音乐是一种跨越语言和文化的艺术形式,能够带给我们无限的感动和快乐。下面是我推荐的一些好听的英文歌曲,希望大家喜欢。 这首歌是英国歌手Ed Sheeran的代表作之一,曲调轻快,旋律优美,歌词简单易懂,非常容…

搞懂mysql事物隔离级别

事物是为交易而生 事物的英文单词 TRANSACTION,就是交易的意思. 交易和事物是一个东西. mysql的事物的4种隔离级别 mysql的事物隔离级设计的一点也不高级 隔离级别只是一个很烧脑的概念,并不是什么高大上的技术. RU,全称read-uncommitted, 中文翻译:读未提交,能够读到未提交…

static关键字在C语言中的作用

static关键字有三个主要作用: 1.修饰全局变量 2.修饰函数 3.修饰局部变量 (1)首先是修饰全局变量,就是变量只能在本文件中使用,不能在其他文件中使用 代码示例:vi 1.c vi 2.c 编译:gcc 1.c 2.c -o main ./main …

指定数组的维度,返回由随机数构成的数组numpy.random.ranf()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 指定数组的维度, 返回由随机数构成的数组 numpy.random.ranf() 选择题 以下说法错误的是? import numpy as np print("【执行1】np.random.ranf()") print(np.random.ra…

Redis整合jedis 学习

前言 redis简单来讲是内存数据库,因为是将数据存放到内存,因此读写速率高快(传统数据库,不是先从内存转到硬存,慢) 1.jedis连接Redis redis是java操作redis的客户端,通过他我们能通过java语句操控redis。 jedis对于…

Vue使用Echarts折线图,实现点击播放、暂停、选择播放倍数;实现数据直播功能

文章目录 🌟前言🌟先看效果🌟整体代码(详细注释)🌟写在最后 🌟前言 哈喽小伙伴们,最近公司有个小需求,就是基于Echarts的折线图,做一个数据直播的功能&#…

manacher(图文详解)

文章目录 简要介绍实际应用算法详解 简要介绍 马拉车算法,Manacher‘s Algorithm 是用来查找一个字符串的最长回文子串的线性方法,是一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性O(N)。 实际应用 刷…

玩转脚本实现自动化

目录 前言: 自动化原理 前置和后置脚本的区别(它们的功能就如同名字一样) 淘宝联盟接入文档 签名算法 调用示例 配置环境参数 设置全局变量 设置相关环境下的服务器地址 开始分析参数指定规则 添加接口 前言: 自动化测…

shell索引数组变量-定义获取拼接删除

目录 介绍数组的定义演示 数组的获取数组的拼接演示: 数组的删除 介绍 Shell 支持数组(Array), 数组是若干数据的集合,其中的每一份数据都称为数组的元素。 ( 注意Bash Shell 只支持一维数组,不支持多维数组…

如何在ASP.NET Core应用中实现与第三方IoC/DI框架的整合?

我们知道整个ASP.NET Core建立在以ServiceCollection/ServiceProvider为核心的DI框架上,它甚至提供了扩展点使我们可以与第三方DI框架进行整合。对此比较了解的读者朋友应该很清楚,针对第三方DI框架的整合可以通过在定义Startup类型的ConfigureServices方…

大学毕业生自荐信范文

大学毕业生自荐信范文1 尊敬的贵公司领导: 您好! 首先感谢您对我的关注,在我即将走出校门的时候,给我一次宝贵的工作机会。 学习了两年的会计专业相关知识后,已经使得我对会计行业有了深刻的认识。技能要靠经验&#x…

7.OpenCV-图像轮廓

1.通过OpenCV的findContours可以很方便的找到图片中内容的轮廓。 2.为了提取轮廓有更高的准确率,在提取轮廓前,需要对图片进行预处理(二值阈值),只保留感兴趣的图像。 3.通过计算轮廓面积与外接矩形或外接圆的面积&a…

2023年6/16 操作系统小知识点

目录 分值第二章1. 进程状态转化的条件2. 进程控制块概念,作用,构成。3. 进程上下文概念,组成4. 进程的创建过程以及步骤5. 作业调度和低级调度算法,基本思想,7个,都要掌握6. 线程概念和处理过程7. 为什么有…

【玩转Docker小鲸鱼叭】虚拟化技术是什么?

到底什么是虚拟化? Docker 是一款基于容器虚拟化技术构建的软件,那到底什么虚拟化技术呢?在学习Docker之前,先简单了解下虚拟化技术。 虚拟化是云原生的实现基础,它能够帮助我们更加有效地利用物理计算机硬件。 虚拟…

德国Kipu Quantum与法国Pasqal合作优化量子算法

​ (图片来源:网络) 6月12日,德国量子软件公司Kipu Quantum宣布与法国中性原子量子计算领域的领导者PASQAL达成为期两年的研发协议,以优化量子算法功能,并为企业加速带来量子效益。 Kipu Quantum专注于为特…

Pytest教程__allure报告(11)

一、allure工具环境配置 windows安装allure 1、下载allure工具包 进入工具包官网:https://github.com/allure-framework/allure2/releases 2、解压下载包 3、将解压包的bin目录路径添加到环境变量中 4、打开cmd命令行输入 allure --version 确认是否安装成功 lin…