回答基本的问题,比如谁在一个非常大的C代码中调用什么
基地经常变化.但是,我也需要一些
自动方式来准确地确定代码在周围做些什么
特定的代码区域. “grep”工具,如Cscope是有用的(和
我已经很大程度地使用它们),但不是C语言感知:他们
不要用任何方式来识别词汇的类型和种类
给定使用类型或功能的环境是这样的
有利于自动化(即使说自动化是有限的
“只读”操作,如代码浏览和导航,但我是
要求比以下更多).
问题:是否存在基于开源C/C++的库
(本机,不管理,不是Microsoft或Linux特定)可以
静态扫描或分析大树的C代码,并可以生成
结果集回答详细的问题,如:
>某些提供的函数调用什么函数?
>什么功能使用这种提供的类型?
>如果涉及到C类或类模板,则同上述问题.
结果集应该提供某种“句柄”.我应该能够
将该句柄提供给库以执行以下类型
内省:
>进行引用的文件中的字节偏移量是多少?
>抽象语法树(AST)的引用是什么?
引用,以便我可以检查周围的代码结构?和
每个AST实体也将具有文件路径,字节偏移量和
与它相关联的类型信息数据,以便我可以递归地走
调用者或引荐来源的图表进行有用的操作.
答案应符合以下要求:
> API:暴露的API必须是以下之一:
> C或C并且可能是“C句柄”或基于C类实例的
(如果是,则必须是通用的C代码,而不是Microsoft-或
Linux特定的代码构造除非是要满足特定的
给定的平台),或
>命令行标准输入和基于标准输出.
> C知道:不限于C代码,而是懂C语言
以细节的细节构建,包括对班级的意识
继承关系和C模板.
>快速:应该扫描大的代码库明显快于
从头开始编译整个代码库.这可能需要
放松,但只有增量结果检索和弹性
对小代码的变更要求完全满足下面.
>提供结果计数:我应该可以问“有多少结果
你会提供一些请求(而不是不给我所有的
结果)?“的响应时间小于3秒
必须检索任何给定问题的所有结果.如果需要
太长时间才能得到答案,那么浪费开发时间.这是
再加上下一个要求.
>增量结果检索:我应该可以问“给我”
只是下一个N个结果的这个请求“,然后一个句柄
结果集,所以我可以反复问这个问题
逐步逐步拉出结果.这意味着我
不必在看到之前等待整个结果集
所有结果的一些子集.而且我可以取消
如果我看到足够的结果,安全运行.原因:我需要
回答一个问题:“构建或发展的影响是什么?
改变一些特定的功能签名?
>弹性到小代码更改:如果我更改标题或源
文件,我不必等待整个代码库
重新扫描,但只有那个头或源文件
重新扫描.重新扫描应该很快.例如,不要做什么cscope
需要你做,这是重新扫描整个代码库
小变化.据了解,如果您更改标题,那么
扫描可能需要更长时间,因为包含该标题的其他文件
必须重新扫描.
> IDE Agnostic:文本编辑器不可知(不要让我使用具体的
文本编辑器;我已经做出了我的选择,谢谢!)
平台不可知论:与平台无关(不要让我只使用它
在Linux上或仅在Windows上,因为我必须使用这两者
平台在我的日常磨练,但我需要的工具是有用的
因为我在两个平台上都有代码沙箱).
>非二进制:除了时间以外,不应该花费我任何东西来下载
并编译库及其所有依赖项.
>不是试用品.
>积极支持:可能向邮件列表发送帮助请求
或相关论坛可能会在不到2的情况下得到回应
天.
>网络不可知:数据库的库构建应该可以直接使用
来自32位和64位系统(Linux和Windows)的网络
可互换地,同时,并不嵌入硬编码的路径
到文件系统,否则会将数据库“root”到a
特定网络.
>构建环境不可知:不需要亲密了解我的构建环境
可能需要编译器知识的显着例外
提供CPP宏定义(例如-Dmacro = value).
解决方法
无论如何,如果只是因为C,C和Objective-C解析/索引能力,CLang框架提供了实际需要构建适合您需求的工具.而且由于它是作为一组可重复使用的图书馆提供的…它是为开发而制作的!