我想试试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
但是没有发生任何事情。
我在这里做错了吗?
答案 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检查此代码,并检测到所有三个错误:
因此,我建议您仍然进行实验。至少第三个案例应该由Clang完全找到。 一个实用的建议是使用更强大的工具,如PVS-Studio进行分析。顺便说一句,他在Clang和GCC中finds errors。