• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kerrspace
V2EX  ›  程序员

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

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

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

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


    所以,最快上手流程是:

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