提问人:Florian Wolters 提问时间:3/20/2020 最后编辑:Florian Wolters 更新时间:6/9/2020 访问量:6027
如何在 Windows 上使用 Clang Static Analyzer?
How-to use Clang Static Analyzer on Windows?
问:
我目前正在尝试在 Windows v10.0.18363.720 操作系统上使用 Microsoft Visual C++ 编译器 (MSVC) v19.25.28610.4 将 Clang 静态分析器 v9.0.1 集成到我的 CMake v3.16.5 构建系统中。
一切都是为架构x86_64而构建的。LLVM 和 Clang 是从源代码构建的。
在万维网 (WWW) 上阅读了一番后,似乎有多种方法可以使用 Clang 静态分析器。可悲的是,文档很糟糕,并且 Windows 操作系统上似乎存在一些特殊的怪癖(主要与 有关),因此集成起来并不简单。IMO,专业程序员将其集成到 C++ 事实上的标准构建系统中应该不会超过一个小时。clang-cl
似乎至少有五种可能性可以调用 Clang 静态分析器:
scan-build
脚本。- 需要 Perl 运行时环境。
- 能够通过一次调用分析多个文件。
- 能够生成 HTML(比其他可能性更先进)、plist 或 sarif 输出文件。
- 我的问题:不检测任何错误,始终打印到 STDOUT。
scan-build: No bugs found.
clang-check
可执行。- 需要一个JSON编译数据库文件。
compile_commands.json
- 能够通过一次调用分析多个文件。
- 应该能够生成 HTML 报告文件。通过论证。
--extra-arg
- 我的问题:无法使其工作(请参阅下面的第二个脚本)。
- 需要一个JSON编译数据库文件。
clang
/clang++
可执行文件。- 能够通过一次调用分析一个文件。
- 我的问题:基本上有效,但对我来说似乎是最糟糕的可能性(由于缺少构建信息)。
c++-analyzer.bat
/ccc-analyzer.bat
批处理脚本。- 似乎只支持 Clang 和 GCC。
- 我的问题:我找不到这些脚本的任何文档。
clang-tidy
仅通过检查即可执行。clang-analyzer-*
- 可以使用JSON编译数据库文件。
compile_commands.json
- 能够通过一次调用分析多个文件。
- 我的问题:无法生成 HTML 报告文件,但只能生成 YAML。
- 可以使用JSON编译数据库文件。
下面是三个批处理脚本,前三种方法各一个:
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
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"
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
我的问题是:
- 如何在 Windows 上工作(我尝试使用 MSVC 和 Clang)?
scan-build.bat
- 如何传递选项以使其创建HTML输出文件并摆脱警告?
clang-check.exe
warning: could not create file in 'main.plist': no such file or directory
- 可以使用/合适的替代方案(imo,它缺少其他两个非工作替代方案应该可用的构建信息)?
clang.exe
clang++.exe
一般而言:在 Windows 上使用 MSVC 使用 Clang 静态分析器生成 HTML 报告的最简单方法是什么?
相关问题:
- 如何使 Clang 静态分析器从命令行输出工作?
- Clang Static Analyzer 找不到最基本的问题
- 如何在 Windows 上将 clang 静态分析器与 msbuild 一起使用?
- scan-build make 未检测到任何错误
更新日志:
- 2020-03-20T12:06Z
- 更新脚本。
clang-check-example.cmd
- 更新脚本。
- 2020-03-20T08:50Z
- 添加对 的提及。
clang-tidy
- 添加对 的提及。
答: 暂无答案
评论