开源的C++扫描库

11
Linux-specific).
  • Licensing: The library must be open source and free for commercial use.
  • Functionality: The library should be able to perform static analysis of C++ code and provide result sets that answer detailed questions about function calls and type usage.
  • Introspection: The library should provide a way to obtain the byte offset into the file where references were made, as well as the reference into the abstract syntax tree (AST) of each reference. Each AST entity should have associated file path, byte-offset, and type-info data so that recursive operations on the graph of callers or referrers can be performed.
  • 针对Linux:代码结构必须适用于Linux环境(除非需要符合特定平台的具体要求)。
  • 命令行标准输入输出:基于命令行标准输入输出。
  • C++语言意识:不仅限于C代码,而且详细了解C ++语言结构,包括类间继承关系和C ++模板。
  • 快速:应该比从头编译整个代码库更快地扫描大型代码库。如果满足下面的增量结果检索对小代码更改的弹性要求,则可能需要放宽要求。
  • 提供结果计数:我应该能够询问“你将为某个请求提供多少结果(不要给我所有结果)?” ,并在不到3秒内响应,而不是为任何给定问题检索所有结果。如果等待时间过长,则会浪费开发时间。这与下一个要求相耦合。
  • 增量结果检索:然后我应该能够询问“仅给我此请求的接下来的N个结果”,然后获得结果集的句柄,以便我可以重复提出问题,因此逐步提取结果。这意味着在看到所有结果的某个子集之前,我不必等待整个结果集。而且如果已经看到足够的结果,我可以安全地取消操作。原因是我需要回答问题:“更改某个特定函数签名的构建或开发影响是什么?”
  • 对小代码更改的弹性:如果我更改了头文件或源文件,则无需等待重新扫描整个代码库,而只需重新扫描该头文件或源文件即可。扫描应该很快。例如,不要像cscope要求的那样对小更改重新扫描整个代码库。可以理解的是,如果更改了头文件,则扫描可能需要更长时间,因为必须重新扫描包含该头文件的其他文件。
  • IDE无关:是文本编辑器无关的(不要让我使用特定的文本编辑器;我已经做出了我的选择,谢谢!)
  • 平台无关:是平台无关的(不要让我只能在Linux或Windows上使用,因为我每天都需要使用这两个平台,但我需要这个工具在两个平台上都能发挥作用,因为我有代码沙盒在两个平台上)。
  • 非二进制:除了下载和编译库及其所有依赖项外,不应花费我任何费用。
  • 非试用软件
  • 积极支持:很可能向邮件列表或相关论坛发送帮助请求会在不到2天的时间内得到回复。
  • 网络无关:库构建的数据库应该能够直接从32位和64位系统以及Linux和Windows之间相互使用,并且不嵌入硬编码路径到文件系统,否则将使数据库“根”到特定网络。
  • 构建环境无关:不需要对我的构建环境有深入的了解,但可能需要了解编译器提供的CPP宏定义(例如-Dmacro=value)。

  • 这个问题看起来像是你要购买符合你规格的东西...但是不,你想要免费的:) 或者你所说的“开源”到底是什么意思? - Roman L
    2
    我认为静态分析并不是你真正想要的。静态分析是关于检查程序不变量并报告程序中潜在错误的。你想要的是索引。 - Matthieu M.
    @matthieu-m:您说得完全正确。我已经从标题中删除了“静态分析”。 - bgoodr
    4个回答

    5
    我认为C语言索引非常适合。然而,我不认为它将数据存储在数据库中。
    无论如何,CLang框架提供了构建根据您需求量身定制的工具所需要的功能,尤其是由于其C、C ++和Objective-C解析 / 索引能力。而且,由于它提供了一组可重复使用的库...它被设计成易于开发!

    看起来这很接近我想要的东西。然而,需要进行实验以查看libindex在索引大规模C++代码库方面的鲁棒性。 - bgoodr

    3

    我必须承认我没有使用过这两个分析器,因为我工作中使用了很多微软特定的代码,其中使用了微软编译器扩展,我不希望它们理解不了。但是我知道的两个开源分析器是Mozilla PorkClang Analyzer


    尽管Mozilla Pork作为查找和修复代码问题区域的示例看起来很有前途,但我认为Clang分析器(以及可能构建在其上的libindex库)更具前途。 - bgoodr
    很遗憾,我无法做出明确的说法。然而,在我看来,Clang分析器似乎更容易使用。 - Max Lybbert

    2
    如果你正在寻找代码分析结果(指标、图表等),为什么不使用工具(而不是API)来完成呢?如果可以的话,我建议你看看Understand
    它不是免费的(有试用版),但我发现它非常有用。

    我曾经尝试将我的大量C++代码输入到Understand中,但他们的解析器卡住了。由于它是二进制的,我无法弄清楚为什么会卡住,所以我放弃了它。哦,而且它不符合非试用软件的要求。 - bgoodr

    1

    也许使用GraphViz的Doxygen可以解决你的一些限制,但并非全部,例如Doxygen的分析不是增量的。


    1
    Doxygen也卡在我的源代码上,所以它不是一个选择。此外,它生成需要使用浏览器的HTML文件,而我正在寻找的是一个API,可以用来驱动符号查找和其他操作。 - bgoodr
    Doxygen还可以生成XML文件,您可以在其中找到所有需要的内容。 - DesignFirst

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接