【发布时间】:2010-11-11 19:48:02
【问题描述】:
您使用哪种静态代码分析器(如果有)?我一直在为 Python 使用 PyLint,我对它非常满意,现在我需要类似的 C 代码。
正常日常使用需要抑制多少输出?
【问题讨论】:
-
扩展我的问题:有人使用过 SourceMonitor (campwoodsw.com/sourcemonitor.html),您如何评价它?
标签: c code-analysis
您使用哪种静态代码分析器(如果有)?我一直在为 Python 使用 PyLint,我对它非常满意,现在我需要类似的 C 代码。
正常日常使用需要抑制多少输出?
【问题讨论】:
标签: c code-analysis
维基百科为各种语言(包括 C)维护list of static code analysis tools。
就我个人而言,我同时使用了PC-Lint 和Splint。最佳选择取决于您编写的应用程序的类型。但是,无论您使用哪种工具,在您正确调整工具和代码之前,都会出现低信噪比。
PC-Lint 是我用过的最强大的 Lint 工具。如果将其添加到现有项目中,信噪比可能会很低。但是,一旦正确配置了工具和代码,它就可以用作标准构建过程的一部分。我使用它的最后一个主要项目,我们设置它以便PC-Lint 警告会破坏构建。 PC-Lint 的许可费用为 389 美元,但物有所值。
Splint 是一个很棒的开源工具。我在几个项目中使用过它,但发现在使用具有非 ANSI C 扩展的编译器时(例如,在嵌入式系统项目上)可能难以配置。
Valgrind 作为动态分析工具也值得考虑。
您特别要求对SourceMonitor 提供反馈。该工具为您的代码提供了有趣的指标,但应该用作对好的 Lint 工具的补充,因为它不提供这种分析。
正如其主页所述,SourceMonitor 将:
...找出你有多少代码和 确定相对复杂性 你的模块。例如,您可以使用 SourceMonitor 识别代码 最有可能包含缺陷的 因此需要正式审查。
我在最近的一个项目中使用它,发现它很容易使用(即使是嵌入式系统代码)。复杂度指标是开发不易出错且更易于维护的代码的绝佳资源。
SourceMonitor 提供了漂亮的输出图表以及格式良好的 XML,如果您想自动收集指标。唯一的缺点是该工具只能在 Windows 上运行。
【讨论】:
我们使用PC-Lint,对此非常满意。
似乎有一些关于消息抑制和调整的阵营:
我们倾向于介于第二和第三类之间。这确实意味着在核心库(大量旧代码)中运行的每个 lint 会产生可笑的 100MiB+ 文本转储(每行一个错误)。
一个自定义的diff-like 工具监视更改并将这些更改通过电子邮件发送给提交的作者,这将大多数人必须查看的数量减少到几行。我们通过一些基本的数据挖掘收集了有关随时间变化的错误的有趣统计数据。
您可以在这里得到真正的完善,将错误超链接回更详细的描述,提供修复现有警告的“点”等...
【讨论】:
llvm clang 项目中有一个 http://clang-analyzer.llvm.org 。我自己没有尝试过,但我打算这样做。
它看起来相当不错: http://www.mikeash.com/?page=pyblog/friday-qa-2009-03-06-using-the-clang-static-analyzer.html 以上是针对 Objective-C 的,但对于 C 来说应该是一样的。
【讨论】:
有splint,但老实说,我一直无法让它工作;在我的平台上,它真的太活跃了。在实践中,我最常用的“lint”是gcc 的以下警告标志
-std=c89 -pedantic -W -Wall -Wstrict-prototypes -Wunreachable-code -Wwrite-strings -Wpointer-arith -Wbad-function-cast -Wcast-align -Wcast-qual
当然,我几乎忘记了其中一半是什么意思。但他们抓住了很多东西。
【讨论】:
我一直使用PCLint 并且非常喜欢它。我希望他们能进入 C#... 他们是所有杂志中关于 C 或 C++ 代码的流行测验的人。
【讨论】: