不懂就要问:阅读他人代码的时候,有什么工具可以画出函数或者类之间的层级调用关系? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuguangxuan
V2EX    C++

不懂就要问:阅读他人代码的时候,有什么工具可以画出函数或者类之间的层级调用关系?

  •  
  •   liuguangxuan 2020-06-25 17:58:31 +08:00 7173 次点击
    这是一个创建于 1952 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在阅读他人的项目代码时,都是徒手在 A4 纸上画出类或者函数之间的调用关系,来梳理出来逻辑。想请问一下各位老哥,有没有好用的工具可以使用?

    目前用的开发工具是 Clion,C++项目。

    如果各老哥有更好的阅读项目代码的经验可以传授,感激不尽。

    19 条回复    2020-08-13 20:56:34 +08:00
    zyzhang
        1
    zyzhang  
       2020-06-25 18:02:25 +08:00   3
    source insight
    hankai17
        2
    hankai17  
       2020-06-25 18:06:17 +08:00   2
    source insight
    hejingyuan199
        3
    hejingyuan199  
       2020-06-25 19:24:34 +08:00   1
    感谢楼上两位的推荐,太棒了。可是我一看价格 239 美元。这么贵?有便宜的办法吗?
    pezy
        4
    pezy  
       2020-06-25 19:35:20 +08:00   2
    sourcetrail
    Hallujah
        5
    Hallujah  
       2020-06-25 20:06:46 +08:00 via Android   3
    Mindjet
        6
    Mindjet  
       2020-06-25 20:09:30 +08:00
    想到几点:
    1. 用 UML 建模,相关软件有很多
    2. IDEA 等 IDE 是有这个功能的,能够自动化绘图
    3. 纸其实也有很大优势,非常随意,做做草图比大多软件都好用,如果不喜欢纸张可以用数位板
    hejingyuan199     7
    hejingyuan199  
       2020-06-25 20:50:54 +08:00
    @Hallujah 哈哈。我买了个大白板,在写字台旁边。大白板超级爽的。
    liuguangxuan
        8
    liuguangxuan  
    OP
       2020-06-25 21:11:28 +08:00
    @pezy #4 感谢大佬推荐。咋一看 ID 好熟悉,才发现当初是看着您的 GitHub 把《 C++ Primer 》刷了一遍。没想到在这儿能碰到。
    liuguangxuan
        9
    liuguangxuan  
    OP
       2020-06-25 21:21:19 +08:00
    @Mindjet #6 感谢推荐
    Newyorkcity
        10
    Newyorkcity  
       2020-06-25 22:53:54 +08:00
    @Mindjet idea 有这个功能?能具体说下吗?
    nightwitch
        11
    nightwitch  
       2020-06-25 23:57:43 +08:00

    Sourcetrail
    nightwitch
        12
    nightwitch  
       2020-06-25 23:58:29 +08:00
    续上楼,开源免费
    yanqiyu
        13
    yanqiyu  
       2020-06-26 00:01:28 +08:00 via Android
    打个断点看调用栈也不失为一种通用方法...
    nuk
        14
    nuk  
       2020-06-26 00:20:53 +08:00
    IDA,debug 可以直接记录指令流。。。
    12tall
        15
    12tall  
       2020-06-26 08:20:26 +08:00
    IDEA?
    jakezh
        16
    jakezh  
       2020-06-26 09:58:58 +08:00
    Sourcetrail +1
    XanderChen
        17
    XanderChen  
       2020-06-26 13:02:40 +08:00
    或者你干脆开个思维导图,一边梳理一边做导图,
    imBossa
        18
    imBossa  
       2020-06-27 15:26:47 +08:00
    @Mindjet idea 有这个功能?能具体说下吗?
    hardwork
        19
    hardwork  
       2020-08-13 20:56:34 +08:00
    自动调用图表?没这么智能的 ide 吧,有很多运行时决定的调用关系根本没法静态全分析吧。
    看代码只要有全局搜功能,声明,实现跳转,find all reference 这些功能就够了,这个任何 ide,或编辑器像 vscode 加个插件就能实现了。
    其它的分析还是要靠理解,文档,业务逻辑和调试日志了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     951 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 20:21 PVG 04:21 LAX 13:21 JFK 16:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86