你使用哪种静态代码分析器(如果有的话)?我一直在使用Python的PyLint,对它相当满意,现在我需要类似的东西来分析C代码。
在日常使用中,你需要压制多少输出?
你使用哪种静态代码分析器(如果有的话)?我一直在使用Python的PyLint,对它相当满意,现在我需要类似的东西来分析C代码。
在日常使用中,你需要压制多少输出?
维基百科维护着一个静态代码分析工具列表,适用于各种语言(包括C语言)。
就我个人而言,我使用过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
工具会监视更改并将其发送到提交作者的电子邮件中,这可以使大多数人需要查看的内容减少到几行。我们通过一些基本的数据挖掘收集有关错误随时间变化的有趣统计信息。
您可以在此处进行真正的精细处理,将错误超链接回更详细的描述,为修复现有警告提供“积分”等等...
有一个splint,但说实话,我从未能够让它工作;在我的平台上,它真的太过活跃了。 实际上,我最常用的“lint”是以下gcc
警告标志:
-std=c89 -pedantic -W -Wall -Wstrict-prototypes -Wunreachable-code -Wwrite-strings -Wpointer-arith -Wbad-function-cast -Wcast-align -Wcast-qual
在 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 应该也是一样的。