选择一个静态代码分析工具

fomnis 发布于 2018-02-25 c 最后更新 2018-02-25 01:10 945 浏览

我正在研究一个项目,我在UNIX环境中使用C语言进行编码。我一直在使用lint工具来检查我的源代码。林特已经很长时间(自1979年以来),任何人都可以提出一个我可以使用的更新的代码分析工具吗?最好是免费的工具。

已邀请:

nodio

赞同来自:

对于C代码,你绝对应该使用Flexelint。我用了将近15年,并发誓。其中一个非常棒的功能是可以通过代码中的注释(“/ lint -e123 /”)选择性地关闭和打开警告。当你想要一些不寻常的东西时,这就成了一个强大的文档工具。 “我正在关闭警告X,因此,我做X的原因有很多。” 对于有兴趣的C/C++问题的任何人,请查看他们网站上的一些示例,并查看是否可以在不查看提示的情况下计算出错误。

adolor

赞同来自:

不要忽视编译器本身。 阅读编译器的文档,找到它可以提供的所有警告和错误,然后启用尽可能多的对您有意义的内容。 另外,请确保告诉编译器处理错误等警告,以便您立即修复它们。 (gcc上的“ - 错误”) 另外:gcc上的“-Wall”不是启用所有警告,不要被愚弄。 还有:检查valgrind(免费!) - 它会“自动检测许多内存管理和线程错误,并详细地描述你的程序。” Valgrind不是一个静态检查器,但它是一个很棒的工具! http://valgrind.org

vvelit

赞同来自:

我听说过关于clang static analyzer的好消息,IIRC使用LLVM作为后端。如果这是在您的平台上实施的,那么这可能是一个不错的选择。 根据我的理解,它不仅仅是语法分析。例如,“自动查找错误”。

yquo

赞同来自:

我们一直在使用Coverity Prevent来检查C++源代码。 这不是一个免费的工具(尽管我相信他们提供对开源项目的免费扫描),但它是您找到的最好的静态分析工具之一。我听说C在C++上比C++更令人印象深刻,但它帮助我们避免了很多错误。

aut_id

赞同来自:

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

Warn about violations of the following style guidelines from Scott Meyers' Effective C++ book:
[剪断] 我知道你问了C,但这是我所知最接近的..

det

赞同来自:

您可能会发现Uno tool有用。这是少数免费的非玩具选择之一。它不同于lint,Flexelint等,专注于少量的“语义”错误(空指针derefs,超出数组索引和使用未初始化的变量)。它还允许用户定义的检查,如锁定解锁规则。 我正在努力公开发布后续工具, Orion ( CONTENT NOT AVAILABLE ANYMORE )

dnulla

赞同来自:

lint 不断更新...所以您为什么要更新一个。 BTW flexelint lint

det

赞同来自:

类似皮毛的工具通常会遭受“虚惊”问题:他们报告的问题比真实存在的要多得多。如果真正有用的警告的比例太低,用户学会忽略该工具。更现代的工具花费一些精力来关注最有可能/有趣的警告。

siusto

赞同来自:

天儿真好, 我完全同意在设置-Wall之后阅读和消化编译器告诉你的建议。 一个很好的静态安全分析工具是David Wheeler编写的FlawFinder。它在寻找各种安全漏洞方面做得很好, 但是,它不会取代有人通过您的代码阅读知识的人。正如大卫在他的网页上所说:“一个带着工具的傻瓜仍然是一个傻瓜!” 干杯, 抢

id_aut

赞同来自:

我最近编制了一份我可以使用的所有静态分析工具的清单,但我仍在评估它们。请注意,这些主要是安全分析工具。

prerum

赞同来自:

PC-lint/Flexelint是非常强大且有用的静态分析工具,可高度配置,但可惜并不免费。 当第一次使用这样的工具时,它们会产生大量的警告,这可能会使得很难区分主要和次要警告。因此,最好尽早在项目中尽早在代码中使用该工具,然后尽可能在代码上运行该代码,以便在出现时处理新的警告。 通过像这样的持续使用,您很快就会学会如何编写代码,以便确认该工具应用的规则。 正因为如此,我更喜欢Lint这类运行速度相对较快的工具,因此鼓励持续使用,而不是使用较不经常使用的更麻烦的工具(如果有的话)。

eea

赞同来自:

我发现通常最好使用多个静态分析工具来查找错误。每个工具的设计都是不同的,他们可以找到彼此非常不同的东西。 在一些会谈here中有一些很好的讨论。这是来自美国国土安全部举行的一次关于静态分析的会议。

pdolor

赞同来自:

Sparse是一种计算机软件工具,已在Linux上提供,用于在Linux内核中查找可能的编码错误。 Linux Verification Center有两个活动项目旨在提高可加载内核模块的质量。

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

hquas

赞同来自:

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

nsit

赞同来自:

您可以尝试CppDepend,这是一款非常完整的静态分析器,可通过VS插件,IDE或命令行在Windows和Linux上获得,并且open source contributors免费