开发专有API的静态源代码分析工具?

问题描述:

有一个建立在C++之上的专有API。因此它使用C++的所有功能,然后拥有自己的API。有一些API的功能与C++ API完全相同(比如对于具有Stralloc的malloc),这些API是出于性能原因而提供的。开发专有API的静态源代码分析工具?

尽管C++有很多静态代码分析器可用,但我们不能使用它们中的任何一种。需要有一个静态代码分析器,可以使用专有API在代码上运行。

我想知道我该如何开始开发代码分析器。它可能不需要像面向C++的面向特征的面向对象。我想从基本的东西开始,比如报告未使用的变量,缓冲区溢出和内存泄漏。

任何指导将不胜感激。

[UPDATE]我发现了以下问题,这是我正在寻找的,唯一的区别是,而不是Java我关心的是专有API。到目前为止,我已经得到了几个很好的答案,但我真的很想从那些经历过这种发展的人那里了解更多。

Introduction to Static Analysis

我很困惑:

这是对的C++顶部或只是对C++的顶部API集的语言实现?

如果是后者,任何正常的C++分析器都会捕获内存泄漏和溢出等问题。

+1

但是这样的剖析器肯定会与诸如boost :: bind,signals和其他为C++增加非强制范例的构造混淆。 – EFraim 2009-07-24 22:00:19

+0

就像我刚才提到的,有些API是用来代替C++ API的。例如,不使用free(),而是使用Strfree()API,它与free()完全相同,但出于性能方面的原因使用。所以任何普通的C++分析器都无法识别这一点。 – user32262 2009-07-24 22:08:39

不要试图从头开始写这个。 C++是非常难以解析的,我不认为你会在这条路上走得太远。

您应该使用可扩展的C++静态分析器,以便您可以编写自己的插件来分析库调用。关闭我的头顶,我建议:

  • gcc的C++前端(GCC现在有插件)
  • 的EDG C++解析器
  • Rose(使用EDG)
  • LLVM(也许使用铛,但它可能没有准备好黄金时间)
  • 微软的凤凰框架(我认为它可以做到这一点,我没有检查)。

最好的答案很可能是叮当或玫瑰。

像Coverity和Klocwork这样的解决方案有一个可扩展的规则集,您可以在其中编写自己的规则。您还可以配置该工具,以便其标准内存检查了解自定义内存分配程序。但有些限制适用。

使用这些工具很有用,因为您可以借用相同的工作流程。同样,这取决于你的代码是什么以及你想要做什么。

解析C++在实践中非常困难。如果你有一个C++扩展方言,你需要一个完全的C++解析器,它“易于”倾向于你的方言,并且具有构建分析工具的手段。

DMS Software Reengineering Toolkit是完全可自定义的通用分析和转换基础结构,提供常规解析,树形构建,符号表构造和流分析功能。它用于构建完全自定义分析器。

它有一个C++ Front End,它可以处理C++的几种标准方言,并且可以自定义来处理其他扩展。 C++前端具有完整的预处理器功能,解析和构建AST,并执行完整的C++名称和类型分析。