Linux中静态代码分析工具的比较?

14

有没有人对Linux可用的静态代码分析工具进行过比较?以下这些工具各自的优缺点是什么:

  • Lintian,
  • Sparse,
  • Splint,
  • RATS,
  • 使用-Wall选项。

您认为只使用其中一个工具就足够了吗?

我不是在寻求建议(我可以找到很多),而是要直接比较可用工具之间的差异。

3个回答

7
当然有维基百科列表。该列表只是一个列表,而不是比较,但页面上的链接之一似乎至少部分回答了您的问题,并(非常简要地)提到了您列出的一些程序。

4

对于每个C开发者来说,使用-Wall应该是理所当然的。此外,额外使用-Wextra也是一个不错的选择。

Splint可以找到应用程序中的其他潜在弱点,但在大多数情况下(!)它会打印出虚假警告,因此您必须真正理解splint使用哪种警告,并且大多数时候您需要在代码中插入注释,例如/out/或/unused/,这样splint就不会对您发出警告。使用splint时,您应该过滤掉对您不重要的警告,否则您将花费太多时间分析和滚动大量消息。

请注意,这些工具仅进行静态代码检查。您应该使用valgrind来查找运行时内存泄漏。


是的,我在Windows世界中使用静态检查器有经验,所以我知道误报问题。 - Makis

3

我曾经使用过Splint几次,但发现它太啰嗦了:我禁用了大部分警告。如果您正确地注释代码,我认为这个工具可能会提供有趣的结果。没有代码注释,这个工具并不是很有帮助。

我有时使用Sparse,并将其视为一种有价值的工具。它提供了一个称为“cgcc”的gcc包装器。因此,即使程序包含许多源文件(export CC=cgcc),也很容易在程序上运行sparse。如果您正在分析内核源代码,则此程序效果最佳。

顺便说一下,我还经常使用pmccabe。pmccabe不是静态分析器:它计算圆形复杂度。它可能帮助您找到程序中最复杂的函数。这些函数很可能存在错误,并且很难进行测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接