首页 / 知识
关于C#:选择静态代码分析工具
2023-04-11 17:11:00

Choosing a static code analysis tool我正在一个项目中,我正在UNIX环境中用C进行编码。 我一直在使用棉绒工具检查我的源代码。 Lint已有很长时间了(自1979年以来),有人可以建议我使用一个较新的代码分析工具吗? 优选地,工具是免费的。 不要忽略编译器本身。 阅读编译器的文档,找到它可以提供的所有警告和错误,然后为您启用尽可能多的警告和错误。 另外,请确保告诉编译器将警告视为错误,这样您就必须立即修复它们。 (gcc上的" -Werror") 另外:gcc上的" -Wall"不会启用所有警告,请不要上当。 还可以:检出valgrind(免费!)-它"自动检测许多内存管理和线程错误,并详细分析程序"。 Valgrind不是静态检查器,但是它是一个很棒的工具! http://valgrind.org 对于C代码,您绝对应该使用Flexelint。我使用了将近15年并发誓。它真正的强大功能之一是可以通过代码中的注释(" / * lint -e123 * /")有选择地关闭和打开警告。当您想要与众不同的东西时,它证明是强大的文档工具。"我正在关闭警告X,因此,有充分的理由我正在执行X。" 对于任何遇到有趣的C / C ++问题的人,请在其网站上查看他们的一些示例,看看是否可以在不查看提示的情况下找出错误。 我听说过有关clang静态分析器的好消息,IIRC使用LLVM作为后端。如果在您的平台上实现,那将是一个不错的选择。 据我了解,它所做的不只是语法分析。例如,"自动错误查找"。
您可以使用cppcheck。这是一种易于使用的静态代码分析工具。 我最近整理了一份可供我使用的所有静态分析工具的清单,但我仍在评估所有工具。请注意,这些大多是安全性分析工具。
我们一直在使用Coverity Prevent检出C ++源代码。 它不是一个免费工具(尽管我相信它们可以为开源项目提供免费扫描),但却是您发现的最佳静态分析工具之一。我听说它在C上比在C ++上印象更深刻,但是到目前为止,它帮助我们避免了很多错误。 您可以尝试CppDepend,这是一个相当完整的静态分析器,可通过VS插件,IDE或命令行在Windows和Linux上使用,并且对开源贡献者免费。 PC-lint / Flexelint是非常强大和有用的静态分析工具,并且高度可配置,尽管遗憾的是它不是免费的。 初次使用此类工具时,它们会产生大量警告,这使得很难区分主要警告和次要警告。因此,最好尽早在项目中开始在代码上使用该工具,然后在代码上尽可能多地运行它,以便您可以在出现新警告时对其进行处理。 通过这样的连续使用,您很快就会学习如何以确认工具所应用规则的方式编写代码。 因此,我更喜欢像Lint这样的工具,它们运行速度相对较快,因此鼓励持续使用,而不是使用那些笨拙的工具(如果有的话,它们可能会减少使用的频率)。 像棉绒一样的工具通常会遇到"错误警报"问题:它们报告的问题比实际存在的问题多得多。如果真正有用的警告比例太低,则用户将学会忽略该工具。更多现代工具花费了一些精力来关注最可能/最有趣的警告。 您可能会发现Uno工具很有用。这是为数不多的免费非玩具选择之一。它与lint,Flexelint等不同,其重点在于少量的"语义"错误(空指针解引用,越界数组索引和未初始化变量的使用)。它还允许用户定义检查,例如锁定-解锁规则。
我正在努力公开发布后继工具 Sparse是一种计算机软件工具,已在Linux上提供,用于在Linux内核中查找可能的编码错误。 Linux Verification Center有两个活动的项目,目的是提高可加载内核模块的质量。 我发现通常最好使用多个静态分析工具来查找错误。每个工具的设计都不同,它们可以找到彼此完全不同的东西。 这里的一些谈话中有一些很好的讨论。它来自美国国土安全部召开的关于静态分析的会议。 G'day, 我完全同意在设置-Wall之后阅读和摘要编译器告诉您的内容的建议。 David Wheeler编写的FlawFinder是一个很好的安全性静态分析工具。寻找各种安全漏洞利用非常出色, 但是,这并不能代替让一个知识渊博的人阅读您的代码。正如David在他的网页上说的:"傻瓜仍然是傻瓜!" 干杯, 抢 皮棉不断更新...所以,为什么要更新一个呢? BTW flexelint是皮棉 gcc有一个" -Weffc ++"选项,根据Mac OS X手册页,该选项将:
[片段] 我知道您问过C,但这是我所知道的最接近的。 |
最新内容
相关内容
关于c#:通用类型检查
关于c#:通用类型检查,关于c#:通用类型检查,类型,布尔,泛型类型参数,方法,Generic type checking有没有一种方法可以强制/限制传递给基元关于fogbugz:基于证据的计划工具
关于fogbugz:基于证据的计划工具,关于fogbugz:基于证据的计划工具,工具,计划,证据,免费,Evidence Based Scheduling Tool是否有任何免关于c#:找不到导入的项目“ C:Microso
关于c#:找不到导入的项目“ C:Microsoft.CSharp.targets”,关于c#:找不到导入的项目“ C:Microsoft.CSharp.targets”,错误,项目,尝试,收关于版本控制:DVCS选择-Windows有什
关于版本控制:DVCS选择-Windows有什么用?,关于版本控制:DVCS选择-Windows有什么用?,项目,版本控制系统,支持,我想,DVCS Choices - What'关于语言不可知:如何将代码贡献回开
关于语言不可知:如何将代码贡献回开源项目?,关于语言不可知:如何将代码贡献回开源项目?,开源项目,如果您,我会,做什么,How to contribute关于不可知的语言:项目中的国际化
关于不可知的语言:项目中的国际化,关于不可知的语言:项目中的国际化,开发人员,知识,国际化,我对,Internationalization in your projecHTML目录生成工具基础介绍
HTML目录生成工具基础介绍,HTML,目录,生成,工具,基础,介绍,园子,里面,,园子里面很多博主都会为自己的博文创建目录,方便大家浏览。我上下文选择器与使用DOM节点
上下文选择器与使用DOM节点,上下文,选择器,与,使用,DOM,节点,Selector,Context,, Selector Context(上下文选择器) 默认JavaScript中主流浏览器的调试工具
JavaScript中主流浏览器的调试工具,JavaScript,中,主流,浏览器,的,调试,工具,,JavaScript中主流浏览器的调试工具通常,您在浏览器中Adobe:我们将为HTML5开发最好的工具
Adobe:我们将为HTML5开发最好的工具,Adobe,我们,将为,HTML5,开发,最,好的,工具,近日,,近日由于和苹果在Flash和HTML5上的争端,Adobe站Adobe发布HTML5开发工具HTML5 Pack
Adobe发布HTML5开发工具HTML5 Pack,Adobe,发布,HTML5,开发工具,Pack,据,国外,,据国外媒体报道,周三,Adobe公司在Google I/O 2010大会