3

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

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

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

任何指导将不胜感激。

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

静态分析简介

4

4 回答 4

2

I'm confused:

Is this a language implementation on top of C++ or just a set of APIs on top of C++?

If the latter, any normal C++ profiler will capture things like memory leaks and overflows.

于 2009-07-24T21:57:20.340 回答
2

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

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

于 2009-07-26T05:58:23.753 回答
1

不要尝试从头开始编写。众所周知,C++ 甚至难以解析,而且我认为您在这条路线上不会走得太远。

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

  • gcc C++ 前端(gcc 现在有插件)
  • EDG C++ 解析器
  • 玫瑰(使用 EDG)
  • LLVM(可能使用 clang,但可能还没有为黄金时段做好准备)
  • Microsoft 的 Phoenix 框架(我认为它可以做到这一点,我没有检查过)。

最好的答案可能是铿锵或玫瑰。

于 2009-07-24T23:03:34.467 回答
1

在实践中解析 C++ 非常困难。如果你有一个 C++ 扩展方言,你需要一个完整的 C++ 解析器,它“容易”适应你的方言,并且有能力构建分析工具。

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

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

于 2009-07-31T03:53:32.460 回答