我正在开发一个项目,我在UNIX环境中用C语言编写代码。我一直在使用lint工具来检查我的源代码。林特已经很长时间(自1979年以来),任何人都可以提出一个我可以使用的更新的代码分析工具吗?最好是免费的工具。选择静态代码分析工具
回答
不要忽视编译器本身。
阅读编译器的文档,找到它可以提供的所有警告和错误,然后启用尽可能多的对您有意义的内容。
此外,请确保告诉您的编译器处理错误等警告,以便您不得不马上修复它们。 (gcc上的“-Werror”)
另外:gcc上的“-Wall”不是而是启用所有警告,不要被愚弄。
另外还有:检查valgrind(免费!) - 它“能够自动检测许多内存管理和线程错误,并详细描述您的程序。”
Valgrind不是一个静态检查器,但它是一个伟大的工具! http://valgrind.org
对于C代码,您绝对应该使用Flexelint。我用了将近15年,并发誓。其中一个非常棒的功能是可以通过代码中的注释(“/ * lint -e123 * /”)选择性地关闭和打开警告。当你想要一些不寻常的东西时,这就成了一个强大的文档工具。 “我正在关闭警告X,因此,我做X的原因有很多。”
对于有兴趣的C/C++问题的任何人,请查看他们网站上的一些示例,看看能否在不查看提示的情况下计算出错误。
Flexelint的价格非常贵。 – nwp 2014-06-05 13:21:57
@nwp,我不会说它很贵。在单座成本1000美元(unix)或400美元(窗口)的情况下,它可能为一个客户问题付出代价。 – 2014-06-05 19:20:28
@MarkHarrison:我可以在线使用吗? – 2014-07-22 19:02:21
我听说过关于clang static analyzer的好消息,IIRC使用LLVM作为它的后端。如果这是在您的平台上实施的,那可能是一个不错的选择。
从我的理解,它不仅仅是语法分析。例如,“自动查找错误”。
我们一直在使用Coverity Prevent来检查C++源代码。这不是一个免费的工具(尽管我相信他们提供免费的开源项目扫描),但它是您找到的最好的静态分析工具之一。我听说C在C++上比C++更令人印象深刻,但它帮助我们避免了很多错误。
有一个“-WeffC++”选项GCC有根据Mac OS X的手册页将:
发出警告从斯科特迈尔斯有效的C++的书违反了以下风格指南:
[剪断]
我知道你问C,但是这是我所知道的最接近..
皮棉不断更新中...为什么你会希望有一个更近的一个。
BTW flexelint 是皮棉
类lint工具通常遭受“假警报”的问题:他们报告了很多问题不是真的存在。如果真正有用的警告的比例太低,用户学会忽略该工具。更现代的工具花费一些精力来关注最有可能/有趣的警告。
天儿真好,
我完全同意建议阅读和消化一下编译器设置后-Wall告诉你。
一个很好的安全静态分析工具是David Wheeler编写的FlawFinder。它做得很好找各种安全漏洞,
但是,它不能取代有见地的人通过您的代码阅读。正如大卫在他的网页上所说:“一个带着工具的傻瓜仍然是一个傻瓜!”
欢呼声,
罗布
PC-lint/Flexelint是非常强大和有用的静态分析工具,以及高度可配置的,但可惜不是免费的。
当第一次使用这样的工具,它们可以产生警告庞大的数字,它可以使难以主要和次要的人区分开来。因此,最好尽早在项目中尽早在代码中使用该工具,然后尽可能在代码上运行该代码,以便在出现时处理新的警告。
通过像这样的持续使用,您很快就会学会如何编写代码,以确认该工具应用的规则。
正因为如此,我更喜欢之类的工具,其相对快速运行皮棉,所以鼓励继续使用,而不是你最终可能会使用较少的较笨重的工具,如果在所有。
我发现通常最好使用多个静态分析工具来查找错误。每个工具的设计都是不同的,他们可以找到彼此完全不同的东西。
在一些谈判here有一些很好的讨论。这是来自美国国土安全部举行的一次关于静态分析的会议。
Sparse是一个计算机软件工具,已经在Linux上提供,用于在Linux内核中查找可能的编码错误。
有两个活动项目Linux Verification Center旨在提高可加载内核模块的质量。
- Linux驱动程序验证(LDV) - Linux设备驱动程序静态源代码验证的综合工具集。
- KEDR框架 - 用于内核模块动态分析和验证的可扩展框架。
- 另一个正在进行的项目是Linux文件系统验证,旨在开发用于验证Linux文件系统实现的专用工具集。
您可以使用cppcheck。这是一个易于使用的静态代码分析工具。
例如:
cppcheck --enable=all .
将检查当前文件夹下的所有C/C++文件。
您可以尝试CppDepend,在Windows和Linux提供一个相当完整的静态分析,throught VS插件,IDE或命令行,而且是免费的open source contributors
- 1. 静态代码分析与动态代码分析工具?
- 2. 静态代码分析工具
- 3. 代码增量静态分析工具?
- 4. 静态代码分析如何工作
- 5. 开源静态代码分析工具,用于C++
- 6. .NET Core的静态代码分析工具
- 7. Windows上的C++静态代码分析工具
- 8. 开发专有API的静态源代码分析工具?
- 9. Common Lisp的静态代码分析工具?
- 10. Linux中静态代码分析工具的比较?
- 11. TeamCity针对.NET的静态代码分析工具
- 12. 静态代码分析/代码注释
- 13. 静态/动态源代码分析
- 14. C++代码分析工具
- 15. 代码分析工具4
- 16. 有没有JavaScript静态分析工具?
- 17. Adobe Flex静态分析工具
- 18. SQL Server静态分析工具?
- 19. 复制粘贴静态分析工具?
- 20. 静态代码分析注释
- 21. 静态代码分析方法
- 22. Python中的静态代码分析?
- 23. 类似PVS-Studio的工具用于C项目中的静态代码分析?
- 24. 在打字稿中是否有任何好的静态代码分析工具?
- 25. 是否有任何工具可以执行Scala代码的静态分析?
- 26. 开源针对Java的静态源代码分析工具(面向安全)
- 27. 动态代码分析工具和动态测试工具是否有区别?
- 28. visual studio代码分析/度量工具
- 29. Mono的源代码分析工具
- 30. 分析Java源代码的工具
也请参阅[什么是最好的命令行工具清理代码](http://stackoverflow.com/questions/393208/what-is-the-best-command-line-tool-to-clean-up-code/)和[C建议的GCC警告选项] (http://stackoverflow.com/questions/154630/recommended-gcc-warning-options-for-c)。如果你的原型正确地集中在头文件中,并在任何地方使用,那么`lint`所做的跨文件检查也是由编译器完成的(尽管每次只有一个文件)。 – 2012-03-05 06:30:55
投票结束,作为工具rec。 – 2015-07-02 12:16:35
PVS-Studio分析仪现在可用于Linux - http://www.viva64.com/en/b/0441/ – 2016-11-06 20:23:47