select一个静态代码分析工具
我正在开发一个项目,在UNIX环境下用C语言编写代码。 我一直在使用lint工具来检查我的源代码。 林特已经很长时间(自1979年以来),任何人都可以提出一个更新的代码分析工具,我可以使用? 最好是免费的工具。
不要忽视编译器本身。
阅读编译器的文档,find所有可能提供的警告和错误,然后启用尽可能多的对您有意义的内容。
另外请确保告诉你的编译器处理像错误一样的警告,所以你不得不马上修复它们。 (gcc上的“ – 错误”)
另外:gcc上的“-Wall” 不启用所有的警告,不要被愚弄。
还有:检查valgrind(免费!) – 它会“自动检测许多内存pipe理和线程错误,并详细描述你的程序”。
Valgrind不是一个静态检查器,但它是一个伟大的工具! http://valgrind.org
对于C代码,你绝对应该使用Flexelint 。 我用了将近15年,发誓了。 其中一个非常棒的function是可以通过代码中的注释(“/ * lint -e123 * /”)select性地closures和打开警告。 当你想要一些不寻常的东西时,这就变成了一个强大的文档工具。 “我正在closures警告X,因此,我正在做X有一些很好的理由。
对于有兴趣的C / C ++问题的任何人来说,看看他们的网站上的一些例子,看看你是否可以找出错误,而不看提示。
我听说过关于铛静态分析仪的好东西,IIRC使用LLVM作为后端。 如果在您的平台上实施,那可能是一个不错的select。
据我所知,它不仅仅是语法分析。 例如,“自动查找错误”。
我们一直在使用Coverity Prevent来检查C ++源代码。
这不是一个免费的工具(虽然我相信他们提供免费的扫描开源项目),但它是最好的静态分析工具之一,你会发现。 我听说C在C ++上比C ++更令人印象深刻,但它帮助我们避免了很多错误。
我最近编制了一份我可以使用的静态分析工具清单,我仍然在评估它们。 请注意,这些主要是安全分析工具。
- 夹板
- RATS
- SMATCH
- 乌诺
你可以使用cppcheck 。 这是一个易于使用的静态代码分析工具。
例如:
cppcheck --enable=all .
将检查当前文件夹下的所有C / C ++文件。
类似皮毛的工具通常遭受“虚惊”问题的困扰:他们报告的问题比实际存在的要多得多。 如果真正有用的警告的比例太低,用户学会忽略该工具。 更现代的工具花费一些努力专注于最有可能/有趣的警告。
PC-lint / Flexelint是非常强大和有用的静态分析工具,并且高度可configuration,尽pipe可悲并不自由。
当第一次使用这样的工具时,会产生大量的警告,这使得很难区分主要和次要警告。 因此,尽可能在项目开始时尽可能在代码中使用该工具,然后尽可能在代码上运行代码,以便随时处理新的警告。
随着这种不断的使用,您很快就会学习如何编写代码,以确认工具应用的规则。
正因为如此,我更喜欢Lint这类运行速度相对较快的工具,所以鼓励持续使用,而不是使用较为繁琐的工具,而这些工具如果使用的话可能会比较less使用。
你可以尝试CppDepend ,一个非常完整的静态分析器可用在Windows和Linux,通过VS插件,IDE或命令行,它是免费的开源贡献者
你可能会发现Uno工具很有用。 这是less数免费的非玩具select之一。 它不同于lint,Flexelint等,关注于less量的“语义”错误(空指针derefs,超出数组索引和使用未初始化的variables)。 它也允许用户定义的检查,如locking解锁纪律。
我正在努力公开发布一个后继工具Orion ( 内容不可用任何一个 )
有一个“-Weffc ++”的gcc选项,根据Mac OS X手册页将会:
警告Scott Meyers的Effective C ++书籍违反以下风格指南:
[剪断]
我知道你问了C,但是这是我所知道的最接近的..
皮棉是不断更新…所以你为什么要一个更新的。
BTW flexelint 是 lint
天儿真好,
我完全同意在设置-Wall之后阅读和消化编译器告诉你的build议。
一个很好的静态安全分析工具是由David Wheeler编写的FlawFinder 。 它很好的寻找各种安全漏洞,
但是,它并不能代替知道有人通读你的代码。 正如大卫在他的网页上所说的,“一个傻子用工具还是个傻瓜!”
干杯,
抢
我发现通常最好使用多个静态分析工具来查找错误。 每个工具的devise都是不同的,他们可以find彼此完全不同的东西。
在这里的一些会谈中有一些很好的讨论。 这是从美国国土安全部举行的一次会议上进行的静态分析。
稀疏是一种计算机软件工具,已经在Linux上提供,用于在Linux内核中查找可能的编码错误。
Linuxvalidation中心有两个活动项目旨在提高可加载内核模块的质量。
- Linux驱动程序validation(LDV) – Linux设备驱动程序静态源代码validation的综合工具集。
- KEDR框架 – 用于内核模块dynamic分析和validation的可扩展框架。
- 另一个正在进行的项目是Linux文件系统validation(Linux File System Verification),旨在开发用于validationLinux文件系统实现的专用工具集。