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

时间:2009-07-24 21:51:33

标签: c++ static-analysis

有一个基于C ++构建的专有API。所以它使用C ++的所有功能,然后有自己的API。有一些API的功能与C ++ API完全相同(就像有了Stalloc的malloc),这些API是出于性能原因而提供的。

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

我想知道如何开始开发代码分析器。它可能不需要像C ++那样面向功能。我想从报告未使用的变量,缓冲区溢出,内存泄漏等基本内容开始。

任何指导都将不胜感激。

[更新]我发现了以下问题,这就是我所寻找的,唯一的区别是,我不关心Java,而是关注专有API。到目前为止,我有很多好的答案,但我真的希望从经历过这种发展的人那里了解更多。

Introduction to Static Analysis

4 个答案:

答案 0 :(得分:2)

我很困惑:

这是一种基于C ++的语言实现还是仅仅是一组基于C ++的API?

如果是后者,任何普通的C ++探查器都会捕获内存泄漏和溢出等内容。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

不要试图从头开始写这个。众所周知,C ++很难解析,我认为你不会在这条路上走得太远。

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

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

最好的答案可能是铿锵有力。

答案 3 :(得分:1)

在实践中解析C ++非常困难。如果你有一个C ++扩展方言,你需要一个完全的C ++解析器,它“容易”弯曲到你的方言,并且有办法构建分析工具。

DMS Software Reengineering Toolkit是完全可定制的通用分析和转换基础架构,提供一般解析,树构建,符号表构建和流分析功能。它用于构建完全自定义的分析仪。

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