c -选择静态代码分析工具

Translate

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

This question and all comments follow the "Attribution Required."

所有的回答

Translate

不要忽略编译器本身。

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

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

另外:gcc上的“ -Wall”确实启用所有警告,请勿上当。

还可以:检出valgrind(免费!)-它“自动检测许多内存管理和线程错误,并详细分析程序”。

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

来源
Translate

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

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

来源
Translate

我听说过关于lang静态分析仪,IIRC使用LLVM作为后端。如果在您的平台上实现,那将是一个不错的选择。

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

来源
Translate

我们一直在使用防止覆盖查看C ++源代码。

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

来源
Translate

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

来源
Translate

您可以使用cppcheck。这是一个易于使用的静态代码分析工具。
例如:
cppcheck --enable=all .
将检查当前文件夹下的所有C / C ++文件。

来源
Translate

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

来源
Translate

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

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

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

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

来源
Translate

你可以试试CppDepend,一个相当完整的静态分析器,可通过VS插件,IDE或命令行在Windows和Linux上使用,并且免费提供给开源贡献者

来源
Translate

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

I'm working towards a public release of a successor tool, 猎户座 (内容不再可用)

来源
Translate

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

警告Scott Meyers的Effective C ++书中有违反以下样式准则的行为:

[片段]

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

来源
itj
Translate

皮棉会不断更新...为什么要更新版本呢?

BTW flexelintis皮棉

来源
Translate

G'day,

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

一个很好的安全性静态分析工具是缺陷查找器大卫·惠勒(David Wheeler)撰写。寻找各种安全漏洞利用非常出色,

但是,这并不能代替让一个知识渊博的人阅读您的代码。正如David在他的网页上说的:“傻瓜仍然是傻瓜!”

干杯,

来源
Translate

我发现通常最好使用多个静态分析工具来查找错误。每个工具的设计都不同,它们可以发现彼此完全不同的东西。

一些谈话中有一些很好的讨论这里。它来自美国国土安全部召开的关于静态分析的会议。

来源
Translate

是一种计算机软件工具,已经在Linux上提供,用于查找Linux内核中可能的编码错误。

有两个活跃的项目Linux验证中心旨在提高可加载内核模块的质量。

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