14

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

  • 林天,
  • 疏,
  • 夹板,
  • 大鼠,
  • 使用 -Wall 选项。

您是否认为仅使用其中一种工具就足够了?

我不是在寻找建议(我可以找到很多),而是在可用工具之间进行直接比较。

4

3 回答 3

7

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

于 2009-06-17T00:06:49.427 回答
4

对于每个 c 开发人员来说,使用 -Wall 应该是理所当然的事情。此外,另外使用 -Wextra 可能是个好主意。

Splint 可以在您的应用程序中找到其他潜在的弱点,但在大多数情况下(!)它会打印错误警告,因此您必须真正了解 splint 意味着什么警告,并且大多数时候您必须的代码所以夹板不会对你大喊大叫。使用夹板,您应该过滤掉对您不重要的警告,否则您会花费太多时间来分析和滚动大量消息。

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

于 2009-06-15T14:39:42.023 回答
3

我已经使用了几次夹板,发现它太冗长了:我禁用了大部分警告。我认为如果您正确注释代码,此工具可能会提供有趣的结果。没有代码注释,这个工具不是很有帮助。

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

作为旁注,我也经常使用 pmccabe。pmccabe 不是静态分析器:它计算圈复杂度。它可以帮助您找到程序中最复杂的功能。这些功能可能容易出错且难以测试。

于 2009-06-15T15:14:24.077 回答