我正在开发一个项目,我在UNIX环境中用C编码。我一直在使用lint工具来检查我的源代码。 Lint已经存在了很长时间(自1979年以来),任何人都可以建议我可以使用更新的代码分析工具吗?最好是免费的工具。
答案 0 :(得分:31)
不要忽视编译器本身。
阅读编译器的文档,找到它可以提供的所有警告和错误,然后启用尽可能多的意义。
还要确保告诉编译器处理错误等警告,这样您就不得不立即修复它们。 (gcc上的“-Werror”)
另外:gcc上的“-Wall”不启用所有警告,不要被愚弄。
另外:查看valgrind(免费!) - 它“自动检测[s]许多内存管理和线程错误,并详细介绍您的程序。”
Valgrind不是静态检查器,但它是一个很棒的工具! http://valgrind.org
答案 1 :(得分:15)
对于C代码,绝对应该使用Flexelint。我用了将近15年,并发誓。其中一个非常棒的功能是可以通过代码中的注释(“/ * lint -e123 * /”)有选择地关闭和打开警告。当你想要一些与众不同的东西时,这就成了一个强大的文档工具。 “我正在关闭警告X,因此,有一个很好的理由我正在做X.”
对于任何有趣的C / C ++问题,请查看他们网站上的一些示例,看看是否可以在不查看提示的情况下找出错误。
答案 2 :(得分:12)
我听说过有关clang static analyzer的好消息,IIRC使用LLVM作为它的后端。如果在您的平台上实现,那可能是一个不错的选择。
据我所知,它不仅仅是语法分析。例如,“自动寻找错误”。
答案 3 :(得分:5)
我们一直在使用Coverity Prevent查看C ++源代码。
它不是一个免费的工具(虽然我相信它们提供免费扫描开源项目),但它是你会发现的最好的静态分析工具之一。我听说它在C上比在C ++上更令人印象深刻,但它帮助我们避免了到目前为止的很多错误。
答案 4 :(得分:5)
答案 5 :(得分:5)
您可以使用cppcheck。它是一种易于使用的静态代码分析工具。
例如:
cppcheck --enable=all .
将检查当前文件夹下的所有C / C ++文件。
答案 6 :(得分:1)
您可能会发现Uno tool很有用。这是为数不多的免费非玩具选择之一。它与lint,Flexelint等的不同之处在于关注少量的“语义”错误(空指针derefs,越界数组索引和未初始化变量的使用)。它还允许用户定义的检查,例如锁定解锁规则。
我正在努力公开发布后续工具 Orion (内容无法提供任何内容)
答案 7 :(得分:1)
类似于Lint的工具通常会遇到“误报”问题:他们报告的问题比实际存在的问题多得多。如果真正有用的警告的比例太低,则用户学会忽略该工具。更现代的工具花费了一些精力来关注最有可能/最有趣的警告。
答案 8 :(得分:1)
PC-lint/Flexelint是非常强大且有用的静态分析工具,并且具有高度可配置性,但遗憾的是它不是免费的。
当第一次使用这样的工具时,它们会产生大量的警告,这使得很难区分主要和次要的警告。因此,最好尽可能在项目早期开始在代码上使用该工具,然后尽可能经常在代码上运行它,以便在出现时能够处理新的警告。
通过这样的持续使用,您很快就会学会如何编写代码,以确认工具应用的规则。
因此,我更喜欢像Lint这样运行相对较快的工具,因此鼓励持续使用,而不是使用较少繁琐的工具,如果有的话,可能不会经常使用。
答案 9 :(得分:1)
你可以试试CppDepend,这是一个非常完整的静态分析器,可以通过VS插件,IDE或命令行在Windows和Linux上使用,它可以免费用于open source contributors
答案 10 :(得分:0)
根据Mac OS X手册页,gcc有一个“-Weffc ++”选项:
警告Scott Meyers的Effective C ++书籍违反以下风格指南:
<强> [剪断] 强>
我知道你问过C,但这是我最接近的......
答案 11 :(得分:0)
lint 会不断更新...所以为什么你想要一个更新的。
BTW flexelint 是 lint
答案 12 :(得分:0)
天儿真好,
我完全同意在设置-Wall之后阅读和消化编译器告诉你的建议。
安全性良好的静态分析工具是由David Wheeler编写的FlawFinder。它在寻找各种安全漏洞方面做得很好,
但是,它并不能取代知识渊博的人阅读您的代码。正如大卫在他的网页上所说,“傻瓜用工具仍然是个傻瓜!”
欢呼声,
罗布
答案 13 :(得分:0)
我发现通常最好使用多个静态分析工具来查找错误。每个工具的设计都不同,他们可以找到彼此截然不同的东西。
在一些会谈中有一些很好的讨论here。这是美国国土安全部举行的关于静态分析的会议。
答案 14 :(得分:0)
Sparse是一种计算机软件工具,已在Linux上提供,旨在查找Linux内核中可能存在的编码错误。
Linux Verification Center有两个活跃的项目旨在提高可加载内核模块的质量。