Clang静态分析仪没有找到最基本的问题
我想尝试一下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
代替,但没有任何发生。
我在这里做错了什么?
一定要使用build-scan -v(详细)来查看是否实际运行铛检查器。 我按照这个教程 http://web.cs.ucla.edu/~tianyi.zhang/tutorial.html 当我尝试C++的例子,它没有显示任何错误的错误代码。 -v向我显示提供的Makefile被破坏了 - 在我修复了这个clang后,仍然没有检测到这个bug,但是g ++显示了这个bug。
也许他们把那个特殊的检查关掉了。 Clang静态分析器3.8版本 本教程使用版本3.2
我卸载了Clang,因为我无法工作,但如果我再试一次,我会尽力做到这一点。 – CodeMonkey
也许你没有做正确的事。 例如,第三个例子的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。
确实看起来该工具是纯粹的废话。根据你的测试,你不需要互联网上的人告诉你,你已经得出这个结论。只需卸载它并获得另一个。 – Lundin
@Lundin似乎有很多项目将信仰融入到LLVM框架中。例如由Mozilla基金会支持的Rust语言。我无法想象所包含的静态分析器是无用的。也许我错过了一些非常基本的东西,例如一些隐藏的配置。 – CodeMonkey
我还没有使用过这个特殊的静态分析器,但还有很多其他的。作为一个经验法则,总是假设它们被破坏无法修复。 – Lundin