我正在做一个相当复杂的项目,更复杂的是它是一个内核内的Linux模块。在这样的代码库上运行像splint这样的linting工具当然不是不可能的1,但微不足道的努力并不足以让事情继续下去。
在我投入更多时间之前,我希望在这个问题上获得一些反馈和意见。有了足够的旗帜,gcc做了相当多的检查。在实践中,使用单独的静态代码分析工具仍然值得吗?
1
发布于 2011-11-22 19:20:14
虽然splint绝对是整洁的,但我认为在Linux内核源代码上使用它所需的努力可能比它所带来的回报还要多。
但是,内核开发人员有自己的sparse工具来执行一些类似的检查,并且已经将其使用深度集成到内核源代码中。将它集成到您的源代码中也应该是很自然的,因为它已经遍布内核源代码。有关使用sparse的详细信息,请参阅Documentation/sparse.txt。
有一个商业项目,Coverity,它偶尔会扫描许多“高度重要”的开源项目来发现问题。他们已经用他们的工具在Linux内核源代码中发现了成百上千的bug。(这是一个快乐的故事,他们为自己的产品做广告,美国政府得到了一大堆极其重要的代码审查,开源作者获得了免费的bug报告,开源用户获得了免费代码审查的好处。四方获胜!)
购买Coverity的专业知识是否值得是另一个问题--但与sparse集成将为您带来静态代码检查工具的一些好处,而无需支付许可费。
发布于 2011-11-23 14:40:39
除了像sparse这样的工具之外,我还建议看看LDV project。LDV首先面向检查Linux驱动程序。该系统比splint和sparse执行更深入的静态分析,并且可以检测非常难以捉摸的问题。
LDV是自由软件。
如果你想试一下,但又没有时间部署它,他们有一个online verification service,你可以在那里上传你的代码并进行检查。
除此之外,Coccinelle系统可能也值得一看。与LDV一样,Coccinelle也用于检测Linux内核中的许多不同错误。
https://stackoverflow.com/questions/8225839
复制相似问题