C++看开源代码有什么好方法吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
primitive
V2EX    程序员

C++看开源代码有什么好方法吗?

  •  1
     
      primitive 2022-09-03 13:17:56 +08:00 5786 次点击
    这是一个创建于 1142 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在 C++项目一般是用 cmake 构建,include, source 文件夹分离,这样的话调试很方便。但我想仅阅读原代码,由于头文件路径问题,vscode 自带的“跳转到函数实现”不能用
    34 条回复    2022-09-05 01:13:20 +08:00
    yingxiangyu
        1
    yingxiangyu  
       2022-09-03 13:20:03 +08:00   2
    换个 IDE
    SoulDee
        2
    SoulDee  
       2022-09-03 13:23:45 +08:00   1
    那个,这世界上不是只有 vscode 这一款编辑器的,CLion, VS 都可以看,Qt Creater 虽然调试可能没前两者那么厉害,但是看代码的话我更喜欢( h 和 cpp 在不需要在文件夹分离。会在编辑器文件列表视图自动给你分开,按 F1 还能在 h 和 cpp 跳转)
    ch2
        3
    ch2  
       2022-09-03 13:47:29 +08:00   3
    你指定一下 includePath 不就行了,vscode 插件全靠自己调教
    nightwitch
        4
    nightwitch  
       2022-09-03 13:59:29 +08:00
    换个可以正确跳转的 IDE
    hsfzxjy
        5
    hsfzxjy  
       2022-09-03 14:00:21 +08:00 via Android
    改下 includePath 就好了
    justanetizen
        6
    justanetizen  
       2022-09-03 14:31:03 +08:00   1
    看 big project 的源码,推荐 source insight
    churchill
        7
    churchill  
       2022-09-03 14:43:19 +08:00
    能编译就能生成 compile_commands.json
    跳转代码啥的有啥问题
    Noicdi
        8
    Noicdi  
       2022-09-03 14:43:55 +08:00   1
    vscode 的话,插件可以用 clangd ,然后通过 bear 生成项目的 compile_commands.json ,这样 clangd 就挺好识别的,跳转什么的挺好用
    在 jyy 老师那边学到的,可以看看这个视频
    https://www.bilibili.com/video/BV1DY4y1a7YD?spm_id_from=333.999.0.0&vd_source=85b04fb11ee5c7ac4c5243ba3579803b&t=2987.5
    jones2000
        9
    jones2000  
       2022-09-03 15:26:10 +08:00
    需要看什么功能, 直接 debug 跑起来,调用你要看的功能,然后单步调试+看代码就可以了,不明白的地方打印变量值看看,如果要要转跳其他分支,手动修改内存变量就可以了,这样能更好的理解代码。 纯看代码感觉没什么用, 跟看小说一样,看完就忘,
    missdeer
        10
    missdeer  
       2022-09-03 15:38:23 +08:00   1
    CMakeLists.txt 里加一句 自动导出 compile_commands.json
    set(CMAKE_EXPORT_COMPILECOMMANDS ON)

    再装一个 clangd 插件,索引建完就好用了
    mineralsalt
        11
    mineralsalt  
       2022-09-03 15:45:31 +08:00
    clion 呗, vscode 也就写前端还行
    hello2090
        12
    hello2090  
       2022-09-03 15:49:12 +08:00 via iPhone
    看代码就是 source code 啊
    hello2090
        13
    hello2090  
       2022-09-03 15:53:56 +08:00 via iPhone   1
    @hello2090 说错了 source insight ,我在国内工作过的两家公司,sourceinsight 和 beyond compare 都是标配。难道现在不是 ++就不流行他们了?
    user0
        14
    user0  
       2022-09-03 16:39:05 +08:00 via Android
    小型项目用 ide ,中型用 source insight ,大型用 opengrok
    fatigue
        15
    fatigue  
       2022-09-03 17:14:34 +08:00   1
    图形界面就 source insight ,终端就 vim+cscope+ctags
    hankai17
        16
    hankai17  
       2022-09-03 17:50:14 +08:00
    c++的话 还是能配合一起调试 阅读起来更方便
    bzEq
        17
    bzEq  
       2022-09-03 18:15:48 +08:00
    vscode 装个 clangd 就行了。然后在你的项目根目录做个软链接到你编译目录的`compile_commands.json`。
    hysjw
        18
    hysjw  
       2022-09-03 19:00:27 +08:00 via iPhone
    我记得现在的插件 compile_commands.json 都是默认启用的 有这个就能自动识别
    FrankHB
        19
    FrankHB  
       2022-09-03 19:13:12 +08:00
    @justanetizen @hello2090 Source Insight ?得了吧,那玩意儿现在怕是还不如开个 VS 手动 Ctrl+Shift+F 靠谱呢。
    而且默认那个故意放大标识符制造语法噪音,反而导致破坏等宽字体的阅读效率,基本就是平时不会习惯同时编辑和阅读的代码的初级用户才会吹的。

    BC 倒是还算好用,但对付代码也没和 KDiff3 之类拉开差距,要经常合并怕还不如。
    YuriX
        20
    YuriX  
       2022-09-03 19:35:52 +08:00
    UE 这种规模的话,VS+VAX 就可以
    wzcloud
        21
    wzcloud  
       2022-09-03 20:20:00 +08:00
    用 Clion
    ptyfork
        22
    ptyfork  
       2022-09-03 20:48:13 +08:00
    Vscode + clangd + remote 简直完美
    littlewing
        23
    littlewing  
       2022-09-03 20:53:08 +08:00
    CLion
    cpper
        24
    cpper  
       2022-09-04 02:01:42 +08:00
    @YuriX rider 不香嘛
    conanforever22
        25
    conanforever22  
       2022-09-04 06:35:01 +08:00
    bear/cmake 生成 compile_commands.json 然后用 ccls 等 lsp server
    https://github.com/rizsotto/Bear
    https://github.com/MaskRay/ccls/wiki/Editor-Configuration
    PowerDi
        26
    PowerDi  
       2022-09-04 10:49:54 +08:00
    @SoulDee 如果是 CLion 的话,不需要 cmake 就可以跳转代码吗?
    PowerDi
        27
    PowerDi  
       2022-09-04 10:51:39 +08:00
    @Noicdi 看了视频 觉得我以前看的视频跟你们关注的真的差好远 竟然有那么实用的
    PowerDi
        28
    PowerDi  
       2022-09-04 10:58:55 +08:00
    @ptyfork 一直没有理解官方的 c++插件有几个功能是跟代码跳转和提示有关的。大家都在建议 clangd ,这个能更具体的请教一下区别在哪里吗
    52coder
        29
    52coder  
       2022-09-04 11:29:15 +08:00
    @justanetizen windows 下的神器,换了 mac 没有 source insight 呀,而且这个软件好久没更新了吧,都是盗版,我同事花 5000 买了个正版
    UFc8704I4Bv63gy2
        30
    UFc8704I4Bv63gy2  
       2022-09-04 15:34:15 +08:00 via Android
    @52coder 不是 239 美金?
    seanzxx
        31
    seanzxx  
       2022-09-04 16:12:08 +08:00
    好像没人提 Understand 呀,多语言支持,多平台支持
    https://www.scitools.com
    52coder
        32
    52coder  
       2022-09-04 16:48:34 +08:00
    @weiqk 4000 刀的都有,不同版本的,我猜你说的这个 239 应该只能用一个版本
    liuguangxuan
        33
    liuguangxuan  
       2022-09-04 21:23:26 +08:00
    @seanzxx #31 Understand 用不起,太贵了
    seanzxx
        34
    seanzxx  
       2022-09-05 01:13:20 +08:00 via iPhone
    @52coder 价格贵的不是不同版本,是打包购买,239 是一个 license ,4180 是 20 个 license ,套装等于批发价会便宜点,你同事买的是多个的套装?
    关于     帮助文档     自助推广系统   博客     API     FAQ     Solana     1897 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 16:12 PVG 00:12 LAX 09:12 JFK 12:12
    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