大型代码库的浏览,学习,查找引用,符号跳转等等,用什么工具比较好? visual studio 顶不住啊...... - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yazoox
V2EX    C++

大型代码库的浏览,学习,查找引用,符号跳转等等,用什么工具比较好? visual studio 顶不住啊......

  •  
  •   yazoox 2021-04-06 14:00:46 +08:00 7501 次点击
    这是一个创建于 1662 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一款老产品,c++写的代码,有十几二十年了吧。.vcproj 估计有几百个,代码行数没有上千万,几百万还是有的。源代码库拉下来,有几十 GB 吧......

    有时候,需要查看一下老代码,了解学习一下,某功能当初是怎么设计实的(毕竟这么多年,当初写的人,不在公司了),现在的功能,需要按照或者参考以前的设计和实现。

    尝试过,建立一个 visual studio 的 solution,把所有的 projects 都添加进来,等 vs 的索引完毕,就能够跳转了,比如,go to definition or references,etc.。可是,这个时候,通常,vs (vs2019) 就“死机了”。

    目前做的是前端项目,也很大。查看代码,用 vscode,还行,顶得住。如果在远程的机器上,我就安装 neovim + coc + leaderF + ripgrep,也是可以正常使用的。

    但是,这个 c++的项目,不知道这个方法行不行。

    所以,来问问大家,有没有碰到过这样的情况,需要查看 /学习老的项目代码,该项目代码库又很庞大。怎么索引,代码跳转呢?谢谢。

    p.s. 现在在内部的 gitlab 上面直接搜索,效率太低了......

    p.s. 我的机器是至强的 32 核心,64G 内存, ssd 硬盘

    38 条回复    2021-06-21 14:33:01 +08:00
    feelapi
        1
    feelapi  
       2021-04-06 14:04:53 +08:00
    sourceinsight, 唯一选择。几千万行的代码库都没问题。
    borisz
        2
    borisz  
       2021-04-06 14:07:58 +08:00
    sourceinsight + 1
    bfdh
        3
    bfdh  
       2021-04-06 14:14:52 +08:00
    sourceinsight + 1
    zzz0xxx
        4
    zzz0xxx  
       2021-04-06 14:21:31 +08:00
    opengork
    nuistzhou
        5
    nuistzhou  
       2021-04-06 14:24:51 +08:00 via iPhone
    GitHub 网页版的索引能满足吗
    yazoox
        6
    yazoox  
    OP
       2021-04-06 14:24:57 +08:00
    @feelapi
    @borisz
    @bfdh
    还别说,你们一提,我想起来了。多年以前,我做 c++项目的时候,还用过 source insight 。
    刚才去看了一眼,这么多年过去了,这产品,咋没有啥变化啊......
    zhongrs232
        7
    zhongrs232  
       2021-04-06 14:27:38 +08:00
    @yazoox 更新到 source insight4.0 了,支持 utf-8 和 GBK 编码,对中文的支持更友好一些
    shylockhg
        8
    shylockhg  
       2021-04-06 14:31:02 +08:00
    挺好奇全量编译一次要多久
    scinart
        9
    scinart  
       2021-04-06 14:48:34 +08:00
    opengrok + 1
    yazoox
        10
    yazoox  
    OP
       2021-04-06 14:57:25 +08:00
    @shylockhg
    一个半小时左右
    minami
        11
    minami  
       2021-04-06 15:18:24 +08:00   2
    都说 sourceinsight,我说个 understand 吧,跨平台版的 sourceinsight
    justforlook44444
        12
    justforlook44444  
       2021-04-06 15:33:50 +08:00
    source insight mac 上能用吗
    typetraits
        13
    typetraits  
       2021-04-06 15:39:18 +08:00
    我看 Chromium 源码,git repo 35G 左右吧,代码 15G,我用 VSCode + vscode-clangd 扩展,利用 Chromium 里面提供的脚本生成 compile_commands.txt ,直接打开项目目录就可以,clangd 索引完成前每打开一个新文件需要等待几秒,索引完成之后跳转、查找关键字速度就都很快了
    elmagnificogg
        14
    elmagnificogg  
       2021-04-06 19:01:48 +08:00 via Android
    source insight
    786375312123
        15
    786375312123  
       2021-04-06 19:03:43 +08:00
    @yazoox 那这个项目也不大啊,我这里有三个编译时间都在一个半小时左右的项目。用 vs 基本都可以正常打开,调试。不过是工作站级别的机器
    xuanbg
        16
    xuanbg  
       2021-04-06 19:21:11 +08:00
    从不抱着学习的目的去看大型代码库。屎山代码有什么好看的
    FrankHB
        17
    FrankHB  
       2021-04-06 20:43:30 +08:00
    C 艹屎山还指望啥查找引用,记明白标识符直接开个 cmd rg 一把梭基本上都比 clangd 靠谱,更别说什么 VS 了……
    comi
        18
    comi  
       2021-04-06 22:26:49 +08:00
    sourceinsight
    ch2
        19
    ch2  
       2021-04-06 23:40:23 +08:00 via iPhone
    还是放弃那些功能比较实在
    poringking
        20
    poringking  
       2021-04-07 02:40:14 +08:00
    domodomo
        21
    domodomo  
       2021-04-07 03:23:19 +08:00
    source-insight+1,几年前常用
    很多 C 艹商业大型代码库里面的编码水平都不咋地,可以说又丑又烂,有些能运行起来都是奇迹
    seesky
        22
    seesky  
       2021-04-07 04:04:00 +08:00
    要不考虑下 scitools understand,
    LANB0
        23
    LANB0  
       2021-04-07 07:13:25 +08:00
    sourceinsight + 1
    pythonee
        24
    pythonee  
       2021-04-07 07:46:44 +08:00 via Android
    source insights
    Mithril
        25
    Mithril  
       2021-04-07 08:14:55 +08:00
    Visual Studio 这东西除非你是 SSD,不然就它那个 32bit 的 devenv,装几个插件打开个大型工程就直接炸了。一般项目太大就直接拆 sln 了,或者只加载必要的项目。
    如果只看代码的话其实不需要真的语义分析建立索引,只需要 token 能查到就行了。跳转不那么精准也能忍。opengrok 或者 sourcegraph 这种基本也就够了。
    52coder
        26
    52coder  
       2021-04-07 09:22:21 +08:00
    sourceinsight + 1,转到 mac 后唯一不习惯的地方,渐渐开始用 clion
    52coder
        27
    52coder  
       2021-04-07 09:23:43 +08:00
    想要一款跨平台的,目前感觉还是 sourceinsight 顺手
    tanranran
        28
    tanranran  
       2021-04-07 10:03:44 +08:00
    @Mithril #25 LZ 的是至强的 32 核心,64G 内存, ssd 硬盘
    HangoX
        29
    HangoX  
       2021-04-07 11:51:35 +08:00
    https://sourcegraph.com/github.com/square/okhttp 简单浏览都是用这个,网页版直接看
    JJFJJ
        30
    JJFJJ  
       2021-04-07 12:06:07 +08:00
    曾经开发 VNDK,开发编译都是 ubuntu,虽然可以 wine 下安装 source insight 但是使用不是很好。最后的解决办法是:ubuntu 安装 samba,把工程目录共享给 windows 电脑使用,在 windows 上进行代码阅读编辑
    gxm44
        31
    gxm44  
       2021-04-07 14:10:19 +08:00
    sourceinsight + 1
    zhusimaji
        32
    zhusimaji  
       2021-04-07 14:20:27 +08:00
    sourceinsight 当年写固件的时候用的神器
    mxi1
        33
    mxi1  
       2021-04-07 14:24:03 +08:00 via Android
    根据编译过程,生成 compdb,一般叫 compile_commnads.json
    mxi1
        34
    mxi1  
       2021-04-07 14:25:28 +08:00 via Android
    不小心按到回车了,compdb 是很多 IDe 都支持的,比如 vs code,你可以上网搜搜怎么生成和使用
    binux
        35
    binux  
       2021-04-07 14:40:23 +08:00 via Android
    @typetraits 直接 https://source.chromium.org/ 搜索它不香吗?
    macha
        36
    macha  
       2021-04-07 16:27:20 +08:00
    只有 sourceinsight 一条路可走了。别的要么扛不住,要么不好用。
    sunbreak
        37
    sunbreak  
       2021-04-08 15:41:09 +08:00
    @JJFJJ WSL 2 挺好用的
    asuraa
        38
    asuraa  
       2021-06-21 14:33:01 +08:00
    只能 sourceinsight 了 别的都够呛
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     913 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 19:57 PVG 03:57 LAX 12:57 JFK 15:57
    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