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

IDEA断点调试查看底层源码---程序员必备核心素养

断点调试–Debug如何进入源码

1.引言

之前在学习这个C语言的时候,我们的这个调试可能并不怎么会使用,无论老师如何强调这个调试的重要性,但是我们可能刚开始都无法体会到这个调试的妙处;

现在,我学习这个java里面的常用类,很多的方法都是被底层封装好的被我们直接调用,如何更好对于这些方法进行调用和重写,如何理解这些方法的底层逻辑,这个时候调试就显得无比的重要,因此,我觉得这个调试的过程有必要学习一下;

2.断点调试案例1

对于下面的这个程序就是一个简单的for循环的过程,我们在这个过程会打印输出每一步的这个i和sum的具体的数值;

image-20241015130759193

我们首先找到这个debug的按键:这个时候程序就会进入调试的状态,这个之前我们需要设置好断点(就是我们的一个参照点)我们的程序可以根据我们的断点进行特殊的控制,让我们的这个程序的调试更具有针对性;

image-20241015131633520

下面的这个断点调试的按键1这个窗口表示的是线程和变量的种类,这个里面的这个6区域上面会显示这个所有的这个程序里面的变量的实时的变化情况,对于我们的这个for循环,主要就是这个循环变量和sum变量的大小的变化,随着我们的这个循环的进行,两个数据肯定是会发生变化的;

3表示的是终止这个调试的过程,4表示的是从当前的断点直接跳转到下一个断点的位置,2表示的是console控制台的意思,这个上面显示的信息就是我们的这个断点调试的过程中每一步都会执行的这个i,sum值的打印输出,这个也是debug的一个好处:把这个过程中所有涉及到的数值全部打印输出;

5就是我们用来控制这个调试的过程,按下这个之后程序就会象下一步继续执行;

QQ_1728969875150

image-20241015132958928

3.断点调试案例2

下面的这个就是一个使用sort方法对于这个数组元素进行排序的过程。我们想要进入这个sort的源码,这个时候我们发现无论是step over还是step into都是进不去的,这个时候我们需要进行额外的配置;

image-20241015174006916

配置方法如下:首先需要进入这个设置(一般我们的配置都是在这个settings上面进行的);

image-20241015173915185

然后按照下面的这个步骤取消下面的两个选项的勾勾,就可以了,然后应用,我们再次调试的时候进就可以进入源码;

QQ_1728979644041

其实下面的这两个,我们上一个案例使用的是这个第一个step over按键,这个是因为我们上一个案例就是使用这个for循环打印数据,计算结果,没有涉及到什么偏向于底层的操作,但是这个里面我们使用了这个sort方法,因此我们有必要说一下这两个的区别;

第一个是step over表示涉及到细节的就会跳过,但是第二个step into就是涉及到方法的调用就会进入这个方法里面去(前提是需要进行上面的设置,因为这个IDEA默认是不会进入源码的)这个时候我们就会看到底层源码

QQ_1728981834860

这个调用的方法还是很厉害的,叫做:“双重枢轴快速排序”算法,没关系,我们现在只是在进行调试,这个源码的分析还需要一定的储备,但是我们需要直到怎么进入这个源码;

image-20241015164658204

其实上面的这个step into是可以不断的进行深入的,这个过程很复杂,这个不是我们要关心的,现在我们介绍一下进去之后如何退出来,就是我们不断的往底层去,当达到某一位置的时候,我们想要跳出来,这个时候我们可以使用这个向上的调试按键:step out这样我们就可以一步一步的跳出来这个过程;

QQ_1728982097214

4.断点调试案例3

这个案例其实就是介绍多个断点之下的调试技巧,我们程序员在进行调试的过程中,如果设置多个断点,可以使用上面的方法进行断点之间的切换跳转;

当然,我们在这个调试的过程中,我们也是可以添加断点的,方便我们对于这个程序的执行逻辑进行查看;

QQ_1728982589642

5.断点调试案例4

image-20241015171741896

这个就是我们查看这个对象的具体的创建过程,我们可以按照上面的这个方式,看看这个对象的创建过程,我们可以分别测试,在重写tostring方法和没有重写这个tostring方法的情况下,这个打印的底层执行逻辑,实际上是这个valueof方法里面的这个tostring但是这个对象是person,如果我们重写这个方法,这个时候调试就会跳转到我们的重写方法去进行这个属性的打印;

image-20241015171027562

image-20241015171010571

除此之外,我们还可以通过简单的案例查看这个动态绑定的过程等等,总之,调试的过程也是提升能力的过程,我们应该多去使用,因为后面的这个方法之类的比较多,我就是因为这个想要查看这个方法的时候不知道如何操作的,才意识到了这个调试的重要性,希望前车之鉴也可让大家提前觉醒~~

原文地址:https://blog.csdn.net/binhyun/article/details/142960281
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/348909.html

相关文章:

  • Android设置状态栏隐藏、固定颜色
  • SpringBoot +Vue3前后端分离项目入门基础实例二
  • 运用 JDK8 中的核心新特性
  • C++:vector(题目篇)
  • 022 elasticsearch文档管理(添加、修改、删除、批处理)
  • 【大数据应用开发】2023年全国职业院校技能大赛赛题第08套
  • 03 go语言(golang) - fmt包基本类型
  • 有点晕,inline, crossinline,noinline小计
  • Chromium 中HTML5 WebSocket实现分析c++(一)
  • 获取首日涨停封盘后第二次交易日上涨/下跌的概率
  • 六、结构型(适配器模式)
  • windows系统备份mysql数据库bat脚本
  • 内核initcall解读
  • 随机掉落的项目足迹:解决TypeError: Cannot read properties of undefined (reading ‘push‘)报错
  • python从0快速上手(十)文件和异常处理2
  • MySQL函数特性详解
  • 案例-登录认证(上)
  • phpstrom 部署ftp 连接失败 宝塔ftp失败
  • 1879 C. Make it Alternating
  • 瑞_RabbitMQ_Java客户端SpringAMQP