2017-03-09 59 views
6

我想尝试一下clang静态分析仪。我在Windows上并使用Visual Studio构建了clang。它似乎工作,但同时它似乎是无用的。Clang静态分析仪没有找到最基本的问题

我做出了表率文件

example.c

int main(void) 
{ 
    int h = 0; 
    return 1/h; 
} 

调用scan-build gcc -c example.c发现任何错误。

example.c

int main(void) 
{ 
    int h; 
    return 1/h; 
} 

调用scan-build gcc -c example.c认定没有错误。

example.c

int main(void) 
{ 
    return 1/0; 
} 

调用scan-build gcc -c example.c认定没有错误。

如果找不到这些最基本的错误(它们可以通过clang本身找到),那么静态分析仪又有什么用处呢?

我的gcc是MinGW,如果这很重要。我也试过用clang代替,但没有任何发生。

我在这里做错了什么?

+0

确实看起来该工具是纯粹的废话。根据你的测试,你不需要互联网上的人告诉你,你已经得出这个结论。只需卸载它并获得另一个。 – Lundin

+0

@Lundin似乎有很多项目将信仰融入到LLVM框架中。例如由Mozilla基金会支持的Rust语言。我无法想象所包含的静态分析器是无用的。也许我错过了一些非常基本的东西,例如一些隐藏的配置。 – CodeMonkey

+1

我还没有使用过这个特殊的静态分析器,但还有很多其他的。作为一个经验法则,总是假设它们被破坏无法修复。 – Lundin

回答

1

一定要使用build-scan -v(详细)来查看是否实际运行铛检查器。 我按照这个教程 http://web.cs.ucla.edu/~tianyi.zhang/tutorial.html 当我尝试C++的例子,它没有显示任何错误的错误代码。 -v向我显示提供的Makefile被破坏了 - 在我修复了这个clang后,仍然没有检测到这个bug,但是g ++显示了这个bug。

也许他们把那个特殊的检查关掉了。 Clang静态分析器3.8版本 本教程使用版本3.2

+0

我卸载了Clang,因为我无法工作,但如果我再试一次,我会尽力做到这一点。 – CodeMonkey

0

也许你没有做正确的事。 例如,第三个例子的Visual Studio 2015年甚至拒绝与错误编译:

error C2124: divide or mod by zero.

我不认为锵不能够检测之类的东西。但是,这并不重要。

我试图检查使用PVS-Studio的这个代码,它检测到的所有三个错误:由零

  • V609鸿沟。分母'h'== 0. MFCApplication2 mainfrm.cpp 17
  • V614使用未初始化的变量'h'。 MFCApplication2 mainfrm.cpp 23
  • V609除以零。分母 '0' == 0 MFCApplication2 MainFrm.cpp中28

因此,我建议你还是实验。 Clang至少应该找到第三种情况。 一个实用的建议是使用更强大的工具,如PVS-Studio进行分析。顺便说一下,他在Clang和GCC的finds errors

相关问题