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 是一个值得期待的产品。

相关推荐
西瓜很甜哟12 分钟前
golang实现大文件分片上传
后端·golang·html
sp42a1 小时前
简单的 Spring 文件上传与下载组件
java·后端·spring
步行cgn1 小时前
为什么 Spring 建议使用构造器注入?
java·后端·spring
小蒜学长1 小时前
基于Vue.js + Spring Boot的酒店客房预订系统设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·酒店客房预订系统
打工仔折腾 AI1 小时前
鸿蒙平板远控电脑实测:ToDesk蓝牙键鼠、双模式鼠标与跨端剪贴板落地记录
人工智能·后端·python·性能优化·计算机外设·电脑·harmonyos
豆角焖肉1 小时前
SpringBoot + Redis 缓存实战
java·spring boot·redis·后端·缓存·菜单缓存
IT_陈寒1 小时前
深入理解Redis:核心原理与最佳实践
前端·人工智能·后端
打工仔折腾 AI1 小时前
鸿蒙端ToDesk远控电脑实测:蓝牙键鼠、双模式鼠标与跨端剪贴板实践
后端·python·性能优化·计算机外设·电脑·harmonyos·ai agent 实战
AINative软件工程1 小时前
LLM 异步任务的 Webhook 工程实践:回调可靠投递、重试与幂等消费的生产设计
后端·ai编程
高频因子挖掘机1 小时前
Python 批量获取股票行情后,如何用 Pandas 统一字段、索引和数据类型?
后端·github·api