有的时候会碰到一些大型的软件系统(百万行代码以上),这个系统又很有价值且值得学习,但碰巧又没有比较完善的设计文档。这个时候从何入手?
对于一个真正热爱程序代码的人来说,我想他是非常热衷于去分析一个大型系统,因为这就像是在丛林中的寻宝探险,充满了挑战、惊喜和快乐。但是,你必须快速掌握系统的总体架构和主要脉络,否则就会很容易迷失在其中的细枝末节当中,没有头绪。
所以,我的问题就是,有没有什么高级工具能够协助分析软件源码,从而给出系统的整体结构,主要脉络,甚至输出各种 UML 图(组件、接口、关系、时序、状态等等)?
1
murmur 2022-08-05 14:12:32 +08:00
不读啊,除非你为了面试充电,按需调试本来就是一种能力
|
2
James369 OP @murmur 对,就是为了学习。
调试? 很多时候要调试它不知道从何入手。 比如 webkit 浏览器,vscode 编辑器,游戏引擎的源代码。能一睹芳容就不错了。 |
3
pluvet 2022-08-05 15:13:58 +08:00 1
没有文档很难理解,效率极低。比如我写一个自己发明的寄存器分配策略,由于这种东西琐碎的细节极多,你光看我的代码基本上无法理解这代码在干啥,可能要花五十个小时去磨。但是如果我亲自给你讲一遍,你可能五分钟就明白了。
|
4
pluvet 2022-08-05 15:15:21 +08:00
像我见过的比较大型的代码,比如文件系统,作者甚至会写一本手册 XXX Algorithms and Data Structures ,再不济也要在注释里写大量的说明。不然很快连作者自己都会看不懂。
|
6
SachinBeyond 2022-08-05 20:39:04 +08:00 via Android
好问题
|
7
secondwtq 2022-08-05 22:12:35 +08:00
工具没见过好用的,开源社区的 dssq 是,我白嫖你的东西,你怎么写的与我无关,我不会用直接一个 issue 骂过去
调试我喜欢打个断点看 call stack |
8
secondwtq 2022-08-05 22:15:33 +08:00
另外我觉得根据具体项目情况,可以看看 tracing 的工具,比如 https://github.com/janestreet/magic-trace (虽然这个事 PT 做的有点重)
不过我暂时还遇到没需要用到这些的时候 ... |
9
secondwtq 2022-08-05 22:19:01 +08:00
哦对还有一个技巧,看 git blame ,从一段代码是哪个 commit 引入开始,可以找到 commit message ,对应的 PR 和 issue 之类的,会有更多的上下文
(当然实操中会有一些问题,比如一些格式化代码之类的 commit 会把 blame 搞乱,这个有 --ignore-rev ,不过一个一个搞还是不太方便,有些 GUI 工具可以简化这个流程) |