很多时候新手看源码都会被绕晕, 本人也踩过这个坑,经过摸索 总结出来一些实用的看源码过程中的debug技巧。

首先,重点是带着问题去看,不然无处下手,都不知道入口是哪

举例:
我想看spring容器getBean时候的过程。是如何getbean的,如果有切面,又是如何实现的。

那么带着这个问题

我就需要去看
applicationContext.getBean("userService");
这行代码。

新手往往直接就点进去了,

然而再点进去之后是一个接口

这个时候就开始懵逼了
这个接口有n个实现,到底是走哪个??? 具体怎么走?

这个时候,第二个问题,不熟的源码,一定要开启debug模式,断点去看,因为框架里面的接口和抽象类往往有多个实现类,不到真正运行的时候,新手是看不出来是用的哪个实现类的。 使用step into可以进入方法内部, 最最注意的 在接口处打断点,debug的时候可以直接跳到该接口的实现类

例子:
打上断点debug

点进去getBean方法


此时点单步调试,先进来这段代码

进来之后

此时如果直接点getbean ,进行去是一个接口,那么可以在接口处打上断点,这样可以直接跳到该接口的实现类

然后点

就能进入到getBean实现类的方法

因此可以选择单步一步步看下去,也可以在接口处打上断点 直接跳到实现类。

注意:该方法也可能会被spring启动过程的其他类调用,因此加上断点之后,可能进入断点的时候不是自己的代码执行流程,因此,要么就是在启动之后,到了getBean那一步去加上断点,要么就是在断点上加上条件 过滤掉不是自己条件的调用

最实用的使用idea看源码的技巧相关推荐

  1. 【实用】面对枯燥的源码,如何才能看得下去?

    作者:陈树义 来源:陈树义(ID:Spark-tree) 一个软件开发人员,工作到了一定的年限(一般是3.4年左右),如果他还没学会阅读源码,那么他就会遇到瓶颈.因为到了这个时候的开发,他应该不仅仅只 ...

  2. 4月,诚邀你参加源码共读,学会看源码,打开新世界!开阔视野

    大家好,我是若川.很多关注我的新朋友可能不知道我组织了源码共读活动~ 也有很多人不知道我是谁.有人以为我是80后.有人以为我是全职自媒体等等.若川的 2021 年度总结,弹指之间 这篇文章写了我是16 ...

  3. 看源码,我为什么推荐IDEA?

    作者:肥朝,来自:肥朝(ID:feichao_java) 1.条件断点 看源码的时候,经常遇到这个情况,源码中有个for循环,关键是这个list的size有时候长达数百个.但是我们只想debug一种情 ...

  4. 为什么要看源码、如何看源码,高手进阶必看

    由于项目的需求,最近花了较多的时间来看开源项目的代码,在本文中,简单总结一下对为什么要看源码.如何看源码这两个问题的思考. 看源码的意义 看源码只是一种方法.手段,而不是目的.我也曾经给自己制定过&q ...

  5. idea 这么还原debug_看源码,我为什么推荐IDEA ?

    1.条件断点 看源码的时候,经常遇到这个情况,源码中有个for循环,关键是这个list的size有时候长达数百个.但是我们只想debug一种情况.肥朝就曾经见过,在for循环中打了断点,一直按跳过,按 ...

  6. 若川诚邀你加源码共读群,帮助更多人学会看源码~

    小提醒:若川视野公众号面试.源码等文章合集在菜单栏中间[源码精选]按钮,欢迎点击阅读,也可以星标我的公众号,便于查找. 回复pdf,可以获取前端优质书籍. 最近我创建了一个源码共读的前端交流群,希望尝 ...

  7. 找准切入点,调试看源码,事半功倍

    关注若川视野,回复"pdf" 领取资料,回复"加群",可加群长期交流学习 最近写了很多源码分析相关的文章,React.Vue 都有,想把我阅读源码的一些心得分享 ...

  8. 11没有源码注释_我们为什么要看源码、应该如何看源码?

    看源码的意义 看源码只是一种方法.手段,而不是目的.我也曾经给自己制定过"阅读xxx源码"的目标,现在看起来真的很蠢,一点不smart(specific.measurable.at ...

  9. 【肥朝】看源码,我为什么推荐IDEA?

    本文并不评论Eclipse与IDEA孰好孰坏,但是由于肥朝平时都是使用IDEA开发的,所以推荐IDEA.这个和肥朝平时都是吃粤菜,所以推荐的都是粤菜为主,但是并不是说其他菜不好吃,肥朝不挑食! 1.条 ...

最新文章

  1. 商汤招股书详解:40名教授250+博士3593位工程师,AI收入亚洲第一,一年15亿研发工资支出...
  2. 计算机英语多层,多层式结构,multi-layer structure,在线英语词典,英文翻译,专业英语...
  3. 转 Wireshark和TcpDump抓包分析心得
  4. 02.规划过程组表格-需求管理计划
  5. 为什么QQ传文件比MSN快 揭密背后原因
  6. Python——有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
  7. Mac下搭建jekyll环境
  8. 在C#中使用SerialPort类实现串口通信 遇到多线程问题
  9. Java代码的维护与更新,Java常用的规则引擎,让你变动的代码更加容易维护
  10. 干货集锦:200+生信范文、30+款软件、12类图片素材PPT,今年的SCI稳了!(附下载)...
  11. RabbitMQ AMQP MessageConverter 消息转换器 PDF Image Text 文本 图片 PDF json
  12. xcode配置最新版opencv
  13. 抽象类java启动线程_java 线程复习笔记
  14. android 控制音乐,Android音乐控制接口RemoteController使用
  15. python可以取代excel吗_10条Python命令全面取代Excel,妈妈再也不用担心我变成黑眼圈大表哥啦...
  16. C语言程序设计:现代方法阅读笔记
  17. java 1.8 64_JDK 1.8 64位 下载 安装 配置
  18. RainMeter学习1
  19. 遗传算法求解带时间窗的VRP问题(python)
  20. 考虑购买的 DELL 配置

热门文章

  1. Oracle索引梳理系列(五)- Oracle索引种类之表簇索引(cluster index)
  2. 计算机网络谢希仁课后习题
  3. 分享快手极速版助手APK和源代码
  4. 《疯狂动物城》水彩画
  5. 0代码实现接口自动化测试 —— RF框架实践
  6. 文章分类标签数据库设计
  7. 推荐几个常用在线图工具(支持时序图、用例图、类图、活动图、组件图、状态图、对象图、部署图等。同时还支持非 UML 图的甘特图、架构图等)
  8. 免费小巧的录屏软件Captura
  9. NFT 的洗盘交易,真的赚钱吗?
  10. 使用 HeadSpin BYOD 进行现场测试