splint vs gcc:外部静态代码分析工具值得为C代码库做些什么?

时间:2011-11-22 11:11:50

标签: gcc linux-kernel splint

我正在开发一个相当复杂的项目,作为一个额外的复杂功能,它是一个内核Linux模块。在这样的代码库上运行像splint这样的linting工具当然不是不可能[1],但是琐碎的努力还不足以让事情顺利进行。

在我投入更多时间之前,我希望能够就此问题获得一些反馈和意见。有足够的标志,gcc做了很多检查。在实践中使用单独的静态代码分析工具仍然值得吗?

[1] http://www.cs.virginia.edu/pipermail/splint-discuss/2005-January/000531.html

2 个答案:

答案 0 :(得分:6)

sparse之类的工具外,我建议您查看LDV project。 LDV首先面向检查Linux驱动程序。该系统执行比splintsparse更深入的静态分析,可以检测到非常难以捉摸的问题。

LDV是免费软件。

如果您想尝试但没有时间进行部署,则会有online verification service,您可以上传代码并进行检查。

除此之外,Coccinelle系统也值得一看。与LDV一样,Coccinelle用于检测Linux内核中的许多不同错误。

答案 1 :(得分:3)

虽然splint肯定是整洁的,但我认为在Linux内核源代码上使用它所需的努力可能比它返回的要多。

但是,内核开发人员拥有自己的sparse工具来执行某些类似的检查,并且已经将其使用深入集成到内核源代码中。将它集成到你的源中也应该感觉非常自然,因为它已经遍布内核源代码。有关使用Documentation/sparse.txt的详细信息,请参阅sparse

有一个商业项目Coverity偶尔扫描许多“高度重要”的开源项目以解决问题。他们使用他们的工具在Linux内核源代码中发现了数百个(如果不是数千个)错误。 (这是一个很好的故事,他们宣传他们的产品,美国政府获得了大量非常重要的代码审查,开源作者获得免费的错误报告,开源用户获得免费代码审查的好处。四方赢!)

是否值得购买Coverity的专业知识是另一个问题 - 但与sparse集成将为您提供静态代码检查工具的一些好处,而无需许可费用。