V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kerrspace
V2EX  ›  程序员

如何阅读极其复杂的 C++程序

  •  
  •   kerrspace · Aug 3, 2022 · 4271 views
    This topic created in 1375 days ago, the information mentioned may be changed or developed.

    JAVA GO RUST 同理 最近在读一个芯片设计领域从逻辑综合工具产生的 json 文件恢复 RTL 信息的 C++代码 虽然是一个相对独立的功能模块 但是涉及到大几百到上千个类 各种函数、类的指针飞来飞去 trace 定义 trace 到几十个文件 还有的代码感觉跟这个模块的 input output 毫无关系不知道在干嘛的(但是一修改结果马上就不对了)

    求问下各位资深的开发人员 大佬们拿到一个不是很熟悉的复杂代码 你们是如何尽快熟悉功能结构再到二次开发的呢?在读复杂程序方面有没有什么心得体会传授一下

    我现在很容易就陷入到 想一想这个事情就觉得千头万绪无处下手的感觉 东看一下西看一下感觉没有个主轴或者说总的思路 效率很低

    17 replies    2022-08-04 12:40:34 +08:00
    aptupdate
        1
    aptupdate  
       Aug 3, 2022 via iPhone
    我现在做的这个 Java 项目和你说的情况差不多,更恶性的是参数动辄十几个,而且还都没注释,要么注释是错的。光靠看根本不行,还是得 debug……
    kerrspace
        2
    kerrspace  
    OP
       Aug 3, 2022
    @aptupdate 对 我就是想知道 在这种信息极度不对称的情况下 有没有什么快速学习代码功能的方法论。。。
    zhuangzhuang1988
        3
    zhuangzhuang1988  
       Aug 3, 2022
    VisualStudio + F5 就好了
    要是不支持的话 只能祈求多福吧.
    xsen
        4
    xsen  
       Aug 3, 2022   ❤️ 2
    从业务流程入手,先主流程,然后次级别流程
    不要关注过于细节的问题,容易只见树木不见森林

    C++的代码维护过无文档,注释牛头不对马嘴——代码量十来万的几个项目,都是这样的做法;相对来说是最快、最有效的
    sadfQED2
        5
    sadfQED2  
       Aug 3, 2022 via Android
    断点调试,一行一行的跟呗
    Vaspike
        6
    Vaspike  
       Aug 3, 2022
    只能 debug
    encro
        7
    encro  
       Aug 3, 2022
    先求需求开始:搞清楚需求,然后思考如果是我来设计,有哪些设计方案,然后看代码的方案和流程是否和你思考的匹配,不匹配点在哪里?原来这样设计的原因可能是什么?----当然原来的设计不一定是最佳。尝试对原有代码进行分类整理。画出主要和分支逻辑流程图。

    然后从你不会的点开始: 那里看不懂,原因是什么,解决办法是什么?光想没用的,动手改造才是正确途径,比如对原有代码进行无痛分类整理,大函数化小函数,补上注释,编写测试代码。


    所以,最快上手流程是:

    用 debug 工具跑完一个流程,看调用了哪些函数,给这些函数加上注释,然后数理流程(画出流程图 /思维导图 /整理文字),然后思考和验证流程,然后再看旁支末结。
    nmap
        8
    nmap  
       Aug 3, 2022
    你是要完全搞懂?还是为了修 bug ?两种方式完全不一样😑
    thyyn
        9
    thyyn  
       Aug 3, 2022 via Android
    为了学习还是为了调试?调试断点一步步走就可以。学习的话用代码查看软件会方便一些。
    msaionyc
        10
    msaionyc  
       Aug 3, 2022
    最好还是让他跑起来,之前看其他一些框架源码也是,不跑起来,干看太累太累了,而且效率低,有时候调用关系啥的还理不明白
    lingalonely
        11
    lingalonely  
       Aug 3, 2022
    只要代码能跑,debug ,debug ,debug 。代码不能跑,那就只能你跑咯
    46fo
        12
    46fo  
       Aug 3, 2022
    Source Insight VSCode
    SM7
        13
    SM7  
       Aug 3, 2022
    1. 跑起来
    2. 打断点看 调用堆栈
    3. 打 log
    4. 改造验证
    haoxue
        14
    haoxue  
       Aug 3, 2022 via Android
    @xsen 赞同,再针对关键代码采用 debug 的方式作为辅助
    zhanlanhuizhang
        15
    zhanlanhuizhang  
       Aug 4, 2022
    用 understand 这样的软件看看。可以帮助理解。
    unlighted
        16
    unlighted  
       Aug 4, 2022
    个人的话,会从主代码入手,先看主线,看完之后看局部代码是什么策略.需要配合 IDE,通过 find reference 方便查看那些通过函数指针进行回调的函数
    FranzKafka95
        17
    FranzKafka95  
       Aug 4, 2022 via Android
    阅读工具上使用 source insight,阅读时通过思维导图或者流程图帮忙梳理
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3034 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 13:26 · PVG 21:26 · LAX 06:26 · JFK 09:26
    ♥ Do have faith in what you're doing.