用于C的夹板代码分析仪

时间:2010-08-09 09:21:01

标签: c code-analysis splint

我们计划将Splint用作C代码库的代码分析器。但我们之前从未尝试过Splint工具,因此我们希望您对其进行改进,利弊。

5 个答案:

答案 0 :(得分:9)

Lint工具可用于查找代码审查可能会遗漏的常见问题和错误。我的观点是,在进行静态代码分析时,您没有什么可失去的。唯一的缺点是你可能会得到许多可能不重要的误报或警告(即编码风格推荐)。你只需要培养良好的过滤技巧。静态分析仪也可能无法捕捉到所有内容,但嘿,它总比没有好。

以下是您可能感兴趣的SANS研究所的白皮书: http://www.sans.org/reading_room/whitepapers/securecode/secure-software-development-code-analysis-tools_389

答案 1 :(得分:2)

阅读this blog postthese slides,快速了解它可以为您做些什么。

答案 2 :(得分:2)

Splint擅长使您的代码更具惯用性(因此更容易阅读,因为各种编译器可以解析,更便于移植,更容易重构)。 Splint可以找到微妙的错误,例如int和浮点之间的隐式转换。 Splint追踪内存泄漏和其他安全漏洞。

试一试:splint hello.c

答案 3 :(得分:1)

华夫曼建议静态分析仪确实会产生大量误报。我发现Prevent比Sparrow提供更好的警报。这些是我们用于静态分析的两个。

典型的误报和良好警报的一个例子是:

bar (char **output) 
{
  *output = malloc(100);
}
foo()
{
  char *output=NULL;
  bar(&output)   
}

在功能栏中,它会报告指针输出的内存泄漏。在函数foo中,它在调用函数栏时报告NULL取消引用。但它仍然可以在100次误报之间找到真正的警报。

因此,我们可以找到代码审查期间可能遗漏的内存泄漏。防止许可证是昂贵的,一旦警报被标记为假,它就不会出现在后续分析中。因此,您必须找到Splint是否也这样做。

答案 4 :(得分:0)

该工具会查找可能出错的模式。优点是该工具可能会发现潜在的错误,缺点是它可能会发现一大堆误报。