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

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

  •  
  •   kerrspace · 2022-08-03 07:46:59 +08:00 · 3445 次点击
    这是一个创建于 631 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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


    所以,最快上手流程是:

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