Как использовать Clang Stati c Analyzer на Windows? - PullRequest
1 голос
/ 20 марта 2020

В настоящее время я пытаюсь интегрировать Clang Stati c Analyzer v9.0.1 в мою систему сборки CMake v3.16.5 с использованием компилятора Microsoft Visual C ++ (MSV * 1167). *) v19.25.28610.4 в операционной системе Windows v10.0.18363.720.

Все построено для архитектуры x86_64. LLVM и Clang были собраны из исходного кода.

После прочтения во Всемирной паутине (WWW), кажется, есть несколько способов использования Clang Stati c Analyzer. К сожалению, документация ужасна, и, похоже, в операционной системе Windows есть некоторые особые особенности (в основном связанные с clang-cl), поэтому ее не так просто интегрировать. IMO, профессиональному программисту не нужно больше одного часа, чтобы интегрировать его в стандартную систему сборки C ++ defacto.

Кажется, что есть как минимум пять возможностей для вызова Clang Stati c Analyzer:

  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 и G CC.
    • Моя проблема : я не могу найти любую документацию для этих сценариев .
  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 (я пробовал оба с использованием MSV C и Clang )?
  2. Как передать параметры в clang-check.exe, чтобы он создал HTML выходные файлы и избавился от предупреждения warning: could not create file in 'main.plist': no such file or directory?
  3. Может использоваться clang.exe / clang++.exe подходящая альтернатива (imo, в ней отсутствует информация о сборке, которая должна быть доступна с двумя другими нерабочими альтернативами)?

В общем: Какой самый простой способ сгенерировать HTML отчет с помощью Clang Stati c Анализатор usi ng MSV C on Windows?

Вопросы, связанные с данной:

История изменений:

  • 2020-03-20T12: 06Z
    • Обновление clang-check-example.cmd скрипт.
  • 2020-03-20T08: 50Z
    • Добавить упоминание clang-tidy.
...