V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
James369
V2EX  ›  程序员

在没有完善设计文档的情况下,如何有效阅读一个大型系统代码?

  •  
  •   James369 · 9 天前 · 765 次点击

    有的时候会碰到一些大型的软件系统(百万行代码以上),这个系统又很有价值且值得学习,但碰巧又没有比较完善的设计文档。这个时候从何入手?

    对于一个真正热爱程序代码的人来说,我想他是非常热衷于去分析一个大型系统,因为这就像是在丛林中的寻宝探险,充满了挑战、惊喜和快乐。但是,你必须快速掌握系统的总体架构和主要脉络,否则就会很容易迷失在其中的细枝末节当中,没有头绪。

    所以,我的问题就是,有没有什么高级工具能够协助分析软件源码,从而给出系统的整体结构,主要脉络,甚至输出各种 UML 图(组件、接口、关系、时序、状态等等)?

    9 条回复    2022-08-05 22:19:01 +08:00
    murmur
        1
    murmur  
       9 天前
    不读啊,除非你为了面试充电,按需调试本来就是一种能力
    James369
        2
    James369  
    OP
       9 天前
    @murmur 对,就是为了学习。
    调试? 很多时候要调试它不知道从何入手。 比如 webkit 浏览器,vscode 编辑器,游戏引擎的源代码。能一睹芳容就不错了。
    pluvet
        3
    pluvet  
       9 天前   ❤️ 1
    没有文档很难理解,效率极低。比如我写一个自己发明的寄存器分配策略,由于这种东西琐碎的细节极多,你光看我的代码基本上无法理解这代码在干啥,可能要花五十个小时去磨。但是如果我亲自给你讲一遍,你可能五分钟就明白了。
    pluvet
        4
    pluvet  
       9 天前
    像我见过的比较大型的代码,比如文件系统,作者甚至会写一本手册 XXX Algorithms and Data Structures ,再不济也要在注释里写大量的说明。不然很快连作者自己都会看不懂。
    James369
        5
    James369  
    OP
       9 天前
    @pluvet 有道理,仔细阅读必要的注释。同时,了解作者的编码习惯和癖好也很重要。
    SachinBeyond
        6
    SachinBeyond  
       8 天前 via Android
    好问题
    secondwtq
        7
    secondwtq  
       8 天前
    工具没见过好用的,开源社区的 dssq 是,我白嫖你的东西,你怎么写的与我无关,我不会用直接一个 issue 骂过去

    调试我喜欢打个断点看 call stack
    secondwtq
        8
    secondwtq  
       8 天前
    另外我觉得根据具体项目情况,可以看看 tracing 的工具,比如 https://github.com/janestreet/magic-trace (虽然这个事 PT 做的有点重)

    不过我暂时还遇到没需要用到这些的时候 ...
    secondwtq
        9
    secondwtq  
       8 天前
    哦对还有一个技巧,看 git blame ,从一段代码是哪个 commit 引入开始,可以找到 commit message ,对应的 PR 和 issue 之类的,会有更多的上下文
    (当然实操中会有一些问题,比如一些格式化代码之类的 commit 会把 blame 搞乱,这个有 --ignore-rev ,不过一个一个搞还是不太方便,有些 GUI 工具可以简化这个流程)
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2428 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 12:13 · PVG 20:13 · LAX 05:13 · JFK 08:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.