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

有什么好的 C/C++代码分析工具吗?

  •  
  •   trav
    travmygit 2019-05-13 00:28:23 +08:00 6854 次点击
    这是一个创建于 2349 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近一直在找 C/C++静态分析工具,一找下来感觉都是分析代码中可能的 bug 之类的(Cppcheck, Doxygen..),

    我的目标很简单,就是给出 .h .cpp .c 文件,然后让找出里面指定类型的名称,比如函数名字,字符串。。。

    python 里面倒是有一个 pycparser,可只是针对 C 语言的,我想要 C/C++都支持的。

    这个需求感觉就是那些个高大上工具分析过程的其中一个小过程,

    问下大家有没有这个类似的工具或者库能用的。。

    20 条回复    2019-05-13 10:36:57 +08:00
    pagxir
        1
    pagxir  
       2019-05-13 01:20:14 +08:00 via Android
    你需要的是 lxr,用来看 mozilla 跟 linux 源代码的那个
    Mithril
        2
    Mithril  
       2019-05-13 02:26:02 +08:00
    你可以用 ANTLR 自己写个,C++的话有写好的语法文件,ANTLR 生成 Parser 以后你自己在对应的回调函数里处理一下就好了。
    或者只是看 Token 的话 OpenGrok 一类的软件都可以,它用的是 CTags 做的 Parser
    Kirscheis
        3
    Kirscheis  
       2019-05-13 05:21:49 +08:00 via Android
    感觉你说的东西不就是 symbol table 吗。。想比较方便地查的话,gdb 和 lldb 似乎都行。。
    Qiaogui
        4
    Qiaogui  
       2019-05-13 06:13:28 +08:00 via Android
    你可以使用 flex 和 bison,网上有关于 anscii cpp 的标准 grammar 文件,拷贝进去,在你要的语法产生式后面写上导出的代码就可以了。
    luozic
        5
    luozic  
       2019-05-13 06:13:53 +08:00 via iPhone
    你这个需要的是看看能不能把 ide 属性标记的代码拆出来。
    Qiaogui
        6
    Qiaogui  
       2019-05-13 06:15:21 +08:00 via Android
    顺带一提,flex 是词法,bison 是语法,两个都要拷。
    luozic
        7
    luozic  
       2019-05-13 06:18:04 +08:00 via iPhone
    https://www.jianshu.com/p/466ebbcb5f0e
    现在一般都是跟踪继承 ,这跟踪一个个参数有啥用?
    dangyuluo
        8
    dangyuluo  
       2019-05-13 06:33:18 +08:00
    pclint,好用
    missdeer
        9
    missdeer  
       2019-05-13 08:08:35 +08:00
    opengrok
    Destiny97
        10
    Destiny97  
       2019-05-13 08:24:20 +08:00 via Android
    source insight 我觉得还不错
    345161974
        11
    345161974  
       2019-05-13 09:07:54 +08:00
    source insight
    chinese_zmm
        12
    chinese_zmm  
       2019-05-13 09:09:46 +08:00 via iPhone
    kclockwork
    HannibaI
        13
    HannibaI  
       2019-05-13 09:10:56 +08:00
    srt180
        14
    srt180  
       2019-05-13 09:18:40 +08:00
    顶一波楼上 clang
    reus
        15
    reus  
       2019-05-13 09:21:03 +08:00
    https://clang.llvm.org/docs/index.html

    看 Using Clang as a Library 一节

    LibTooling 结合 RecursiveASTVisitor 可以实现你想要的
    nilbot
        16
    nilbot  
       2019-05-13 09:23:03 +08:00 via Android
    clangd 和 /或 cquery
    jxf2008
        17
    jxf2008  
       2019-05-13 09:35:38 +08:00   1
    颤抖中。。。。。
    我也是学 C++的,为啥你们说的我一个都不认识。。
    yujincheng08
        18
    yujincheng08  
       2019-05-13 09:37:50 +08:00 via Android
    libclang 了解一下
    eliteYang
        19
    eliteYang  
       2019-05-13 10:26:39 +08:00
    cppcheck
    sonarqube
    zwh2698
        20
    zwh2698  
       2019-05-13 10:36:57 +08:00
    你找的应该是从词法到语义的分析器吧, 推荐 Visual Parse++
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5519 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 07:26 PVG 15:26 LAX 00:26 JFK 03:26
    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