相关疑难解决方法(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
查看次数

scan-build make不会检测到任何错误

我有一个非常简单的.c文件,里面有一些明显的错误.

#include <stdio.h>

struct S {
  int x;
};

void f(struct S s){
}

void test() {
  struct S s;
  f(s); // warn
}

int test2(int x){
  return 5/(x-x); // warn
}

int main(){
  test();
  test2(532);
  printf("Hej\r\r");
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用clang的静态代码分析工具(scan-build)来检测错误.当我直接在文件上运行该工具时,例如使用以下命令:

scan-build g ++ -o 1 1.c.

我确实获得了预期的输出,包括来自编译器的警告,该警告提到除以0.

scan-build:使用'/usr/lib/llvm-3.8/bin/clang'进行静态分析

1.c:在函数'int test2(int)'中:1.c:16:11:警告:除零[-Wdiv-by-zero]返回5 /(xx); ^

1.c:16:11:警告:除零返回5 /(xx);

〜^ ~~~~~生成1个警告.scan-build:找到1个bug.scan-build:运行'scan-view/tmp/scan-build-2016-07-11-152043-3028-1'来检查错误报告.

现在,我试图将该命令放入一个非常简单的Makefile中.我的Makefile的内容是:

all: 1.c
    g++ -o 1 1.c
clean:
    rm -f *.o 1
Run Code Online (Sandbox Code Playgroud)

但是,每当我使用make运行scan-build时,使用以下命令:

scan-build make

我仍然收到编译器的警告,但不是扫描构建工具!

scan-build:使用'/usr/lib/llvm-3.8/bin/clang'进行静态分析

g ++ -o 1 1.c.

1.c:在函数'int test2(int)'中:

1.c:16:11:警告:除零[-Wdiv-by-zero]返回5 …

c static-analysis makefile clang scan-build

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