Clang Static Analyzer没有找到最基本的问题

时间:2017-03-09 13:32:33

标签: c clang llvm static-analysis clang-static-analyzer

我想试试clang静态分析仪。我在Windows上并使用Visual Studio构建了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但是没有发生任何事情。

我在这里做错了吗?

2 个答案:

答案 0 :(得分:2)

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

也许他们把那个特别的检查结束了。 Clang Static Analyzer版本3.8 本教程使用版本3.2

答案 1 :(得分:0)

也许你没有做对。 例如,第三个例子Visual Studio 2015甚至拒绝编译错误:

  

错误C2124:除以或除以零。

我不认为Clang无法发现类似的东西。但是,这并不重要。

我尝试使用PVS-Studio检查此代码,并检测到所有三个错误:

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

因此,我建议您仍然进行实验。至少第三个案例应该由Clang完全找到。 一个实用的建议是使用更强大的工具,如PVS-Studio进行分析。顺便说一句,他在Clang和GCC中finds errors