有没有人对Linux可用的静态代码分析工具进行过比较?以下这些工具各自的优缺点是什么:
- Lintian,
- Sparse,
- Splint,
- RATS,
- 使用-Wall选项。
您认为只使用其中一个工具就足够了吗?
我不是在寻求建议(我可以找到很多),而是要直接比较可用工具之间的差异。
有没有人对Linux可用的静态代码分析工具进行过比较?以下这些工具各自的优缺点是什么:
您认为只使用其中一个工具就足够了吗?
我不是在寻求建议(我可以找到很多),而是要直接比较可用工具之间的差异。
对于每个C开发者来说,使用-Wall应该是理所当然的。此外,额外使用-Wextra也是一个不错的选择。
Splint可以找到应用程序中的其他潜在弱点,但在大多数情况下(!)它会打印出虚假警告,因此您必须真正理解splint使用哪种警告,并且大多数时候您需要在代码中插入注释,例如/out/或/unused/,这样splint就不会对您发出警告。使用splint时,您应该过滤掉对您不重要的警告,否则您将花费太多时间分析和滚动大量消息。
请注意,这些工具仅进行静态代码检查。您应该使用valgrind来查找运行时内存泄漏。
我曾经使用过Splint几次,但发现它太啰嗦了:我禁用了大部分警告。如果您正确地注释代码,我认为这个工具可能会提供有趣的结果。没有代码注释,这个工具并不是很有帮助。
我有时使用Sparse,并将其视为一种有价值的工具。它提供了一个称为“cgcc”的gcc包装器。因此,即使程序包含许多源文件(export CC=cgcc
),也很容易在程序上运行sparse。如果您正在分析内核源代码,则此程序效果最佳。
顺便说一下,我还经常使用pmccabe。pmccabe不是静态分析器:它计算圆形复杂度。它可能帮助您找到程序中最复杂的函数。这些函数很可能存在错误,并且很难进行测试。