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

问题描述 投票:2回答:1

我目前正在尝试将 Clang静态分析器 v9.0.1到我的 CMake v3.16.5 构建系统,在Windows v10.0.18363.720操作系统上使用Microsoft Visual C++ Compiler (MSVC) v19.25.28610.4。

一切都是针对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 ccc-analyzer.bat 批量脚本。
    • 似乎只支持Clang和GCC。
    • 我的问题: 我找不到 任何 这些脚本的文档。
  5. clang-tidy 可执行的 clang-analyzer-* 仅检查。
    • 可以使用JSON编译数据库文件 compile_commands.json.
    • 能够用一次调用分析多个文件。
    • 我的问题: 不能生成HTML报告文件,只能生成YAML。

这里有三个批处理脚本,前三种方法各有一个。

  1. scan-build-example.cmd

    @echo off
    setlocal
    cls
    
    rem Configure
    call scan-build.bat^
     -v^
     -v^
     -v^
     -analyze-headers^
     --force-analyze-debug-code^
     -o _scan_build_out^
     --keep-cc^
     --html-title="Scan Build Example"^
     --show-description^
     --use-cc="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64\cl.exe"^
     --use-c++="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64\cl.exe"^
     -stats^
     -maxloop 4^
     -internal-stats^
     --use-analyzer="E:\dev\native\llvm\llvm-9.0.1\Release\static\x64-windows-msvc1924-v142\bin\clang.exe"^
     -analyzer-config stable-report-filename=true^
     -enable-checker core,cplusplus,deadcode,nullability,optin,osx,security,unix,valist^
     cmake^
     -S "D:\cmake\cmake-example-clang-static-analyzer"^
     -B "D:\cmake\cmake-example-clang-static-analyzer\_scan-build"^
     -G "Ninja"^
     -DCMAKE_C_COMPILER:PATH="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64\cl.exe"^
     -DCMAKE_CXX_COMPILER:PATH="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64\cl.exe"^
     -DCMAKE_BUILD_TYPE:STRING=Debug
    
    rem Build
    call scan-build.bat^
     -v^
     -v^
     -v^
     -analyze-headers^
     --force-analyze-debug-code^
     -o _scan_build_out^
     --keep-cc^
     --html-title="Scan Build Example"^
     --show-description^
     --use-cc="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64\cl.exe"^
     --use-c++="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64\cl.exe"^
     -stats^
     -maxloop 4^
     -internal-stats^
     --use-analyzer="E:\dev\native\llvm\llvm-9.0.1\Release\static\x64-windows-msvc1924-v142\bin\clang.exe"^
     -analyzer-config stable-report-filename=true^
     -enable-checker core,cplusplus,deadcode,nullability,optin,osx,security,unix,valist^
     cmake^
     --build "D:\cmake\cmake-example-clang-static-analyzer\_scan-build"^
     --config Debug
    
  2. clang-check-example.cmd

    @echo off
    setlocal
    cls
    
    set out_dir=%~dp0.\_clang_check_out
    
    mkdir "%out_dir%" > nul 2>&1
    
    rem Issue: "warning: could not create file in 'main.plist': no such file or directory"
    clang-check^
     -analyze^
     -extra-arg=-Xclang^
     -extra-arg=-analyzer-config^
     -extra-arg=-Xclang^
     -extra-arg=add-pop-up-notes=true,mode=deep^
     -extra-arg=-Xclang^
     -extra-arg=-analyzer-checker=core,cplusplus,deadcode,nullability,optin,osx,security,unix,valist^
     -extra-arg=-Xclang^
     -extra-arg=-analyzer-output=html^
     -extra-arg=-o=%out_dir%^
     -p "D:\cmake\cmake-example-clang-static-analyzer\_build"^
     "D:\cmake\cmake-example-clang-static-analyzer\app\main.cpp"
    
  3. clang_analyze-example.cmd

    @echo off
    setlocal
    cls
    
    set out_dir=%~dp0.\_clang_analyzer_out
    
    mkdir "%out_dir%"
    clang++^
     --analyze^
     -Xanalyzer^
     -analyzer-checker=core,cplusplus,deadcode,nullability,optin,osx,security,unix,valist^
     -Xanalyzer^
     -analyzer-output=html^
     -o "%out_dir%"^
     -I"D:\cmake\cmake-example-clang-static-analyzer\src"^
     "D:\cmake\cmake-example-clang-static-analyzer\app\main.cpp
    

我的问题是:

  1. 如何使 scan-build.bat 在Windows上工作(我试过使用MSVC和Clang)?
  2. 如何将选项传递给 clang-check.exe 使它能够创建HTML输出文件,并摆脱了 warning: could not create file in 'main.plist': no such file or directory 警告?
  3. 可以使用 clang.exe clang++.exe 一个合适的替代方案(我认为,它缺少了其他两个不工作的替代方案应该有的构建信息)?

一般来说。在Windows上使用MSVC用Clang静态分析器生成HTML报告的最简单方法是什么?

相关问题:如何让Clang Static Analyzer在Windows上使用MSVC生成HTML报表?

更改日志

  • 2020-03-20T12:06Z
    • 更新 clang-check-example.cmd 脚本。
  • 2020-03-20T08:50Z
    • 增加提及 clang-tidy.
c++ visual-c++ clang static-analysis clang-static-analyzer
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.