选择静态代码分析工具
我正在一个项目中,我正在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这样的工具,它们运行速度相对较快,因此鼓励持续使用,而不是使用那些笨拙的工具(如果有的话,这些工具最终可能会较少使用)。