C的静态代码分析器

时间:2009-07-17 19:24:46

标签: c code-analysis

您使用哪种静态代码分析器(如果有)?我一直在使用PyLint for Python,我对它非常满意,现在我需要类似的C代码。

你必须抑制多少输出正常的日常使用?

6 个答案:

答案 0 :(得分:14)

维基百科为各种语言(包括C)维护list of static code analysis tools

就个人而言,我使用了PC-LintSplint。最佳选择取决于您编写的应用程序类型。但是,无论您使用哪种工具,在您正确调整工具和代码之前,信噪比都会很低。

PC-Lint是我使用过的最强大的Lint工具。如果将其添加到现有项目中,则信噪比可能较低。但是,一旦正确配置了工具和代码,就可以将其用作标准构建过程的一部分。我使用它的最后一个主要项目,我们设置它以便PC-Lint警告会破坏构建。 PC-Lint的许可证价格为389美元,但这是值得的。

Splint是一款出色的开源工具。我已经在几个项目中使用过它,但发现在使用带有非ANSI C扩展的编译器时(例如在嵌入式系统项目中),可能很难配置。

Valgrind作为动态分析工具也值得考虑。


您特别要求就SourceMonitor提供反馈意见。此工具为您的代码提供了有趣的指标,但应该用作良好Lint工具的补充,因为它不提供这种分析。

如其主页所述,SourceMonitor将:

  

...找出你有多少代码和   确定相对复杂性   你的模块。例如,您可以使用   SourceMonitor识别代码   这很可能包含缺陷   因此需要进行正式审查。

我在最近的项目中使用它并发现它易于使用(即使对于嵌入式系统代码)。复杂性度量标准是开发代码的极好资源,这些代码不易出错且易于维护。

SourceMonitor提供了很好的输出图表,以及格式良好的XML,如果您想自动化指标收集。唯一的缺点是该工具只能在Windows上运行。

答案 1 :(得分:5)

我们使用PC-Lint并对此非常满意。

似乎有一些关于消息抑制和调整的阵营:

  • 压制所有内容,然后仅解压缩您感兴趣的内容
  • 取消所有内容,然后取消对您不感兴趣的警告
  • 保持一切不受压迫

我们倾向于介于第二和第三类之间。这确实意味着每个lint在核心库(大量旧代码)上运行时出现了一个荒谬的100MiB +文本转储(每行一个错误)。

一个自定义的diff工具可以监视更改并通过电子邮件发送给提交者的作者,这样可以保留大多数人必须查看的内容。我们通过一些基本的数据挖掘收集有关时间错误的有趣统计数据。

你可以在这里得到很好的修饰,将错误链接回更详细的描述,提供修复现有警告的“要点”等等。

答案 2 :(得分:3)

splint,但说实话,我从来没有能够让它工作;在我的平台上,它真的太过分了。在实践中,我最常用的“lint”是gcc

的以下警告标志
-std=c89 -pedantic -W -Wall -Wstrict-prototypes -Wunreachable-code  -Wwrite-strings -Wpointer-arith -Wbad-function-cast -Wcast-align -Wcast-qual

当然,我大多忘记了其中一半的意思。但他们抓住了很多东西。

答案 3 :(得分:2)

我非常喜欢David Evans在LC/Lint上的工作,显然它的名字已改为Splint。它非常具有攻击性,您可以通过向代码添加注释来告诉它许多有用的信息。 它旨在与程序员注释一起使用。它将在没有它们的情况下运行,但如果您尝试将其用作简单的检查器而不提供任何注释,您可能会感到失望。如果您想要的是完全自动化的检查,并且如果您可以处理仅限Windows的工具,那么您最好使用Gimpel的PC-Lint。 Jim Gimpel拥有超过25年的满意客户。

答案 4 :(得分:0)

我永远使用PCLint并非常喜欢它。我希望他们能够进入C#......他们是所有杂志中C或C ++代码的流行测验。

答案 5 :(得分:0)

llvm clang项目http://clang-analyzer.llvm.org中有一个。我自己没试过,但我打算这样做。

它看起来很不错: http://www.mikeash.com/?page=pyblog/friday-qa-2009-03-06-using-the-clang-static-analyzer.html 以上是针对Objective-C但C应该是相同的。