No. 4 亲测体验几个代码阅读工具

近期在阅读一个陌生Java项目的过程中,学习了"断点回溯法",也亲测了几个代码阅读工具。这里简单分享一下工具的使用体验。

  1. SequenceDiagram

大名鼎鼎的 SequenceDiagram,可能有不少小伙伴们已经在使用的了,毕竟序列图是最接近于真实业务流程的表达形式。

安装插件后,随便找到一个函数,右键"SequenceDiagram" 就可以生成一个如下形式的图。

这个插件最大的优点是简便易用,但缺点也很明显:

  • 生成的是静态序列图,不能反映真实的请求运行情况,没有运行时数据可以参考
  • 对于抽象类和实现,没办法有效地展现(比如上图本应该是一个Chain模式,但序列图无法知道下一个Filter是什么)
  • 细节无差别地展示,重点不突出,遇到复杂函数,感觉会一团糟
  1. Idea Debugger

大部分同学应该都是使用 Debugger 方法来读代码的,其最大的好处就是可以展示出运行时堆栈和数据。

在上一篇文章中,介绍了"断点回溯法",就是基于这个 Debugger 来操作的。

运用好"断点回溯法",配合 Debugger 的运行时数据,一般来说,就是一个比较好的源码阅读体验了。

至于该方法的缺陷,之前也提到了,就是"只见局部,不见整体",遇到复杂异步或者多线程的项目,阅读起来依然会比较费劲。

  1. Debugger-to-Uml

有少部分 jy 提到了这个工具,我就去体验了一下。这是对"Debugger"的一个增强。简单来讲,就是可以把一个堆栈转换成序列图。

体验下来,感觉有点点用,但是不大。毕竟,堆栈就是一个线性的序列,没有分叉。

唯一有点超出预期的地方就是,这个工具可以筛选包名,可以针对性看某个局部。这在一个堆栈非常长的时候,有点用。

在看堆栈的时候,有一个真正的问题,大家却都没有解决,那就是抽象类的问题。比如上面这个堆栈,可以看到很多 Filter 都显示是"OncePerRequestFilter",这明显不符合预期的,按照Chain的设计模式,一般不会有重复的 Filter。而堆栈之所以这样显示,是因为 OncePerRequestFilter 是一个基础父类,很多Filter都是继承了它去实现的。但这些继承的子类,在堆栈中,却没有展现出来。这个问题,在第一次看代码时,很容易懵逼!

  1. XCodeMap

这是一个新兴的阅码工具,还处于测试阶段。其野心比较大,目标是"5分钟读懂一个陌生项目"。

这个有点夸张了,不过其理念还是不错的,把运行时数据和静态代码分析相结合,并且利用AI进行标注,以突出重点。

看一下效果图。

整体效果还是不错的,不过目前功能还不够完善,只能生成序列图。有兴趣的同学可以去官网申请测试 xcodemap.tech/

体验下来,Idea Debugger 仍然是非常重要的工具。不够,随着现代化项目越来越复杂,"只见局部不见整体"的阅码方式,效率还有较大的提升空间。这方面,XCodeMap 是一个值得期待的产品。

相关推荐
my_styles3 小时前
docker-compose部署项目(springboot服务)以及基础环境(mysql、redis等)ruoyi-ry
spring boot·redis·后端·mysql·spring cloud·docker·容器
免檒4 小时前
go语言协程调度器 GPM 模型
开发语言·后端·golang
不知道写什么的作者4 小时前
Flask快速入门和问答项目源码
后端·python·flask
caihuayuan55 小时前
生产模式下react项目报错minified react error #130的问题
java·大数据·spring boot·后端·课程设计
一只码代码的章鱼5 小时前
Spring Boot- 2 (数万字入门教程 ):数据交互篇
spring boot·后端·交互
不再幻想,脚踏实地8 小时前
Spring AOP从0到1
java·后端·spring
编程乐学(Arfan开发工程师)8 小时前
07、基础入门-SpringBoot-自动配置特性
java·spring boot·后端
会敲键盘的猕猴桃很大胆9 小时前
Day11-苍穹外卖(数据统计篇)
java·spring boot·后端·spring·信息可视化
极客智谷9 小时前
Spring Cloud动态配置刷新:@RefreshScope与@Component的协同机制解析
后端·spring·spring cloud
Lizhihao_9 小时前
Spring MVC 接口的访问方法如何设置
java·后端·spring·mvc