我正在开发一个项目,在 UNIX 环境中用 C 进行编码。我一直在使用 lint 工具来检查我的源代码。Lint 已经存在很长时间了(自 1979 年以来),任何人都可以建议我可以使用更新的代码分析工具吗?最好是免费的工具。

有帮助吗?

解决方案

不要忽视编译器本身。

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

还要确保告诉编译器将警告视为错误,以便您必须立即修复它们。(gcc 上的“-Werror”)

还:gcc 上的“-Wall”确实如此 不是 启用所有警告,不要被愚弄。

另外还有:查看 valgrind(免费!) - 它“自动检测许多内存管理和线程错误,并详细分析您的程序。”

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

其他提示

对于 C 代码,你绝对应该使用 弗莱塞林特. 。我已经使用它近 15 年了,并对它发誓。它真正强大的功能之一是可以通过代码中的注释有选择地关闭和打开警告(“/* lint -e123*/”)。当您想要一些不寻常的东西时,这被证明是一个强大的文档工具。“我正在关闭警告 X,因此,我这样做是有充分理由的。”

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

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

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

我们一直在使用 预防隐蔽性 查看 C++ 源代码。

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

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

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

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

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

当第一次使用这样的工具时,它们可能会产生大量警告,这使得很难区分主要警告和次要警告。因此,最好尽早在项目中开始在代码上使用该工具,然后尽可能频繁地在代码上运行它,以便您可以在出现新警告时处理它们。

通过这样的持续使用,您很快就会学会如何以符合该工具应用的规则的方式编写代码。

正因为如此,我更喜欢像 Lint 这样运行相对较快的工具,因此鼓励持续使用,而不是那些你可能最终会减少使用(如果有的话)的更麻烦的工具。

你可以试试 Cpp依赖, ,一个非常完整的静态分析器,可通过 VS 插件、IDE 或命令行在 Windows 和 Linux 上使用,并且免费 开源贡献者

您可能会发现 乌诺工具 有用。它是为数不多的免费非玩具选项之一。它与 lint、Flexelint 等不同。重点关注少量“语义”错误(空指针取消引用、越界数组索引以及使用未初始化的变量)。它还允许用户定义的检查,例如锁定解锁规则。

我正在努力公开发布后续工具, 猎户座 (内容不再可用)

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

对违反 Scott Meyers 的《Effective C++》书中的以下风格指南的行为发出警告:

[剪]

我知道你问过 C,但这是我所知道的最接近的..

皮棉 正在不断更新中...那么你为什么想要一个更新的呢?

顺便说一句 Flexelint 皮棉

你好,

我完全同意阅读和消化编译器在设置 -Wall 后告诉您的内容的建议。

一个好的安全静态分析工具是 缺陷查找器 由大卫·惠勒撰写。它在寻找各种安全漏洞方面做得很好,

但是,它并不能取代让知识渊博的人通读您的代码。正如大卫在他的网页上所说,“拥有工具的傻瓜仍然是傻瓜!”

干杯,

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

一些演讲中有一些很好的讨论 这里. 。这是美国国土安全部举办的一次静态分析会议的内容。

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

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

  1. Linux 驱动程序验证 (LDV) - 用于 Linux 设备驱动程序静态源代码验证的综合工具集。
  2. KEDR Framework - 用于动态分析和验证内核模块的可扩展框架。
  3. 另一个正在进行的项目是 Linux 文件系统验证,旨在开发用于验证 Linux 文件系统实现的专用工具集。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top