相关疑难解决方法(0)

如何在 Windows 上使用 Clang 静态分析器?

我目前正在尝试在 Windows v10.0.18363.720 操作系统上使用 Microsoft Visual C++ 编译器 (MSVC) v19.25.28610.4将Clang Static Analyzer v9.0.1集成到我的CMake v3.16.5 构建系统中。

一切都是为架构 x86_64 构建的。LLVM 和 Clang 是从源代码构建的。

在万维网 (WWW) 上阅读一些内容后,似乎有多种方法可以使用 Clang 静态分析器。遗憾的是,文档很糟糕,而且在 Windows 操作系统上似乎有一些特殊的怪癖(主要与 相关clang-cl),因此集成起来并不简单。IMO,专业程序员将其集成到 C++ 事实标准构建系统中的时间不应超过一小时。

调用 Clang 静态分析器似乎至少有五种可能性:

  1. scan-build 脚本。
    • 需要 Perl 运行时环境。
    • 能够通过一次调用分析多个文件。
    • 能够生成 HTML(比其他可能性更先进)、plist 或 sarif 输出文件。
    • 我的问题:没有检测到任何错误,总是打印scan-build: No bugs found.到 STDOUT。
  2. clang-check 可执行。
    • 需要一个 JSON 编译数据库文件compile_commands.json
    • 能够通过一次调用分析多个文件。
    • 应该能够生成 HTML 报告文件。通过--extra-arg论证。
    • 我的问题:无法使其工作(请参阅下面的第二个脚本)。
  3. clang/clang++可执行文件。
    • 能够通过一次调用分析一个文件。
    • 我的问题:基本上有效,但对我来说似乎是最糟糕的可能性(由于缺少构建信息)。
  4. c++-analyzer.bat …

c++ static-analysis clang visual-c++ clang-static-analyzer

9
推荐指数
0
解决办法
2575
查看次数

clang的scan-build不适用于简单的cpp文件

我不能让clang's c++-analyzer工作在玩具C++文件上.

#include <iostream>

using namespace std;

int main()
{
    int t[4];
    int x,y;

    t[5]=1;
    if(x)
        y = 5;
    x = t[y];
}         
Run Code Online (Sandbox Code Playgroud)

makefile就是这样

all: t.cpp
    $(CXX) t.cpp
Run Code Online (Sandbox Code Playgroud)

scan-build make 输出:

scan-build: 'clang' executable not found in '/usr/share/clang/scan-build/bin'.
scan-build: Using 'clang' from path: /usr/bin/clang
/usr/share/clang/scan-build/c++-analyzer t.cpp
scan-build: Removing directory '/tmp/scan-build-2012-06-14-6' because it contains no reports.
Run Code Online (Sandbox Code Playgroud)

如何使c ++ - analyzer工作?在Ubuntu 11.10上,Clang的版本是2.9.

编辑:我知道代码不正确.关键是Clang并没有抱怨明显的错误.如果我将上面的代码粘贴到.c文件(没有using ...)clang正确发出警告.

c++ static-analysis clang

8
推荐指数
1
解决办法
4152
查看次数

Clang Static Analyzer找不到最基本的问题

我想尝试一下clang静态分析仪.我在Windows上并使用Visual Studio构建了clang.它似乎工作,但同时它似乎是非常无用的.

我做了一个示例文件

example.c

int main(void) 
{
    int h = 0;
    return 1/h;
}
Run Code Online (Sandbox Code Playgroud)

调用scan-build gcc -c example.c没有发现错误.

example.c

int main(void) 
{
    int h;
    return 1/h;
}
Run Code Online (Sandbox Code Playgroud)

调用scan-build gcc -c example.c没有发现错误.

example.c

int main(void) 
{
    return 1/0;
}
Run Code Online (Sandbox Code Playgroud)

调用scan-build gcc -c example.c没有发现错误.

如果找不到这些最基本的错误(并且可以通过clang本身找到它们),静态分析仪如何才能使用?

gcc如果重要的话,我是MinGW.我也试过替代,clang但没有发生任何事情.

我在这里做错了吗?

c static-analysis llvm clang clang-static-analyzer

7
推荐指数
1
解决办法
1495
查看次数