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

tra*_*das 5 gcc splint linux-kernel

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

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

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

Eug*_*ene 6

除了像这样的工具sparse,我建议看看LDV项目.LDV首先面向检查Linux驱动程序.该系统执行比静态分析更深的静态分析splint,sparse并且可以检测非常难以捉摸的问题.

LDV是免费软件.

如果您想尝试但没有时间进行部署,他们会提供在线验证服务,您可以上传代码并进行检查.

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


sar*_*old 3

虽然splint确实很简洁,但我认为在 Linux 内核源代码上使用它所需的努力可能比它所获得的回报更多。

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

有一个商业项目,Coverity,偶尔会扫描许多“高度重要”的开源项目是否存在问题。他们使用他们的工具在 Linux 内核源代码中发现了数百个(如果不是数千个)错误。(这是一个快乐的故事,他们为自己的产品做广告,美国政府获得了大量极其重要的代码审查,开源作者获得免费的错误报告,开源用户获得免费代码审查的好处。四方共赢!)

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