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中心有两个活动项目旨在提高可加载内核模块的质量。

  1. Linux驱动程序validation(LDV) – Linux设备驱动程序静态源代码validation的综合工具集。
  2. KEDR框架 – 用于内核模块dynamic分析和validation的可扩展框架。
  3. 另一个正在进行的项目是Linux文件系统validation(Linux File System Verification),旨在开发用于validationLinux文件系统实现的专用工具集。