选择静态代码分析工具

时间:2020-03-05 18:37:53  来源:igfitidea点击:

我正在一个项目中,我正在UNIX环境中用C进行编码。我一直在使用棉绒工具检查我的源代码。 Lint已经存在很长时间了(自1979年以来),有人可以建议我使用一个较新的代码分析工具吗?优选地,工具是免费的。

解决方案

回答

对于C代码,我们绝对应该使用Flexelint。我用了将近15年并发誓。它真正的强大功能之一是可以通过代码中的注释(" / * lint -e123 * /")有选择地关闭和打开警告。当我们想要与众不同的东西时,它证明是强大的文档工具。 "我正在关闭警告X,因此,我正在执行X是有充分的理由。"

对于任何遇到有趣的C / C ++问题的人,请在其网站上查看他们的一些示例,看看是否可以在不查看提示的情况下找出错误。

回答

不要忽略编译器本身。

阅读编译器的文档,找到它可以提供的所有警告和错误,然后为我们启用尽可能多的警告和错误。

另外,请确保告诉编译器将警告视为错误,这样我们就必须立即修复它们。 (gcc上的" -Werror")

另外:gcc上的" -Wall"不会启用所有警告,请不要上当。

另外还:请检查valgrind(免费!),它"自动检测许多内存管理和线程错误,并详细分析程序"。

Valgrind不是静态检查器,但是它是一个很棒的工具! http://valgrind.org

回答

我听说过有关clang静态分析器的好消息,IIRC使用LLVM作为后端。如果在平台上实现,那将是一个不错的选择。

据我了解,它所做的不只是语法分析。例如,"自动错误查找"。

回答

我们一直在使用Coverity Prevent检出C ++源代码。

它不是一个免费工具(尽管我相信它们可以为开源项目提供免费扫描),但是它是我们会发现的最好的静态分析工具之一。我听说它在C上比在C ++上更加令人印象深刻,但是到目前为止,它帮助我们避免了很多错误。

回答

gcc有一个" -Weffc ++"选项,根据Mac OS X手册页,该选项将:

Warn about violations of the following style guidelines from Scott Meyers' Effective C++ book:

[片段]

我知道我们问过C,但这是我所知道的最接近的。

回答

我们可能会发现Uno工具很有用。这是为数不多的免费非玩具选择之一。它与lint,Flexelint等不同,其重点在于少量"语义"错误(空指针解引用,越界数组索引和未初始化变量的使用)。它还允许用户定义检查,例如锁定-解锁规则。

我正在努力公开发布后继工具Orion(不再提供任何内容)

回答

皮棉会不断更新...那么,为什么要更新一个呢?

BTW flexelint是皮棉

回答

像棉绒一样的工具通常会遇到"虚假警报"问题:它们报告的问题比实际存在的问题多得多。如果真正有用的警告比例太低,则用户将学会忽略该工具。更多现代工具花费了一些精力来关注最可能/最有趣的警告。

回答

G'day,

我完全同意在设置-Wall之后阅读和摘要编译器告诉建议。

David Wheeler编写的FlawFinder是一个很好的安全性静态分析工具。寻找各种安全漏洞利用非常出色,

但是,这并不能代替让一个知识渊博的人阅读代码。正如David在他的网页上说的那样:"使用工具的傻瓜仍然是傻瓜!"

干杯,

回答

我最近整理了一份可供我使用的所有静态分析工具的清单,但我仍在评估所有工具。请注意,这些大多是安全性分析工具。

  • 夹板
  • 老鼠
  • SMATCH
  • 宇野

回答

PC-lint / Flexelint是非常强大且有用的静态分析工具,并且高度可配置,尽管遗憾的是它不是免费的。

初次使用此类工具时,它们会产生大量警告,从而很难区分主要警告和次要警告。因此,最好尽早在项目中开始在代码上使用该工具,然后尽可能在代码上运行该工具,以便我们可以在出现新警告时对其进行处理。

像这样连续使用,我们很快就会学会如何以确认工具所应用规则的方式编写代码。

因此,我更喜欢像Lint这样的工具,它们运行速度相对较快,因此鼓励持续使用,而不是使用那些笨拙的工具(如果有的话,这些工具最终可能会较少使用)。