Поделиться через


/analyze (анализ кода)

Включает анализ кода и параметры управления.

Синтаксис

Общие параметры анализа:

/analyze[-]
/analyze:only
/analyze:quiet
/analyze:max_paths number
/analyze:stacksize number
/analyze:WX-

Параметры подключаемого модуля анализа:

/analyze:plugin plugin_dll

Параметры анализа внешних файлов:

/analyze:external-
/analyze:external:ruleset ruleset_files

Параметры журнала анализа:

/analyze:autolog[-]
/analyze:autolog:ext extension
/analyze:log log_path

Параметры формата файла журнала:

/analyze:log:format:sarif
/analyze:log:format:xml

Параметры содержимого файла журнала:

/analyze:sarif:analyzedfiles[-]
/analyze:sarif:configuration[-]
/analyze:log:compilerwarnings
/analyze:log:includesuppressed

Параметры набора правил:

/analyze:rulesetruleset_file

Параметры набора правил:

/analyze:projectdirectory project_directory
/analyze:rulesetdirectory ruleset_directories
/analyze:ruleset ruleset_files

Аргументы

Общие параметры анализа

/analyze[-]
Включает анализ кода. Используется /analyze- для явного отключения анализа. /analyze- — это поведение по умолчанию.

По умолчанию выходные данные анализа отправляются в консоль или окно вывода Visual Studio, как и другие сообщения об ошибках. Анализ кода также создает файл журнала с именем filename.nativecodeanalysis.xml, где filename имя проанализированного исходного файла.

/analyze:only
По умолчанию компилятор компилирует код для создания файлов объектов перед выполнением анализа кода. Параметр /analyze:only делает компилятор пропускать передачу создания кода и напрямую выполняет анализ кода. Ошибки компилятора по-прежнему препятствуют выполнению анализа кода. Однако компилятор не сообщит о других предупреждениях, которые он может найти во время передачи кода. Если программа не является бесплатной от предупреждений создания кода, результаты анализа могут быть ненадежными. Этот параметр рекомендуется использовать только в том случае, если код передает проверки синтаксиса создания кода без ошибок или предупреждений.

/analyze:quiet
Отключает выходные данные анализа в консоли или окне вывода Visual Studio.

/analyze:max_paths number
Параметр number задает максимальное количество путей кода для анализа. Анализ по умолчанию — 256 путей. Более крупные значения приводят к более тщательной проверке, но анализ может занять больше времени.

/analyze:stacksize number
Параметр number задает размер в байтах кадра стека, который создает предупреждение C6262. Размер кадра стека по умолчанию составляет 16 КБ.

/analyze:WX-
Сообщает компилятору не обрабатывать предупреждения анализа кода как ошибки, даже если /WX этот параметр используется. Дополнительные сведения см. в разделе /WX (уровень предупреждений).

Параметры подключаемого модуля анализа

/analyze:plugin plugin_dll
Включает указанный подключаемый модуль анализа кода dll для анализа кода.

Пробел между /analyze:plugin файлом plugin_dll и путь к файлу необязателен, если путь не требует двойных кавычки ("). Например, можно написать /analyze:plugin EspxEngine.dll. Однако если путь заключен в двойные кавычки, между файлом и путь к файлу не может быть пробелом /analyze:plugin . Вот пример: /analyze:plugin"c:\path\to\EspxEngine.dll".

Подсистема анализа кода использует подключаемые модули для поиска определенных категорий дефектов. Модуль анализа кода поставляется со встроенными подключаемыми модулями, которые обнаруживают различные дефекты. Чтобы использовать другой подключаемый модуль с подсистемой анализа кода, укажите его с помощью /analyze:plugin параметра.

Подключаемый модуль LocalEspC.dll реализует проверки, связанные с параллелизмом. Эти проверки вызывают предупреждения в диапазоне C261XX, например C26100 до C26167.

Чтобы загрузить LocalEspC.dll, используйте параметр /analyze:plugin LocalEspC.dllкомпилятора.

Некоторые подключаемые модули, например EspXEngine.dll, которые поставляется с Visual Studio, используют расширения, которые могут выполнять дальнейший анализ. Visual Studio включает эти расширения для EspXEngine: ConcurrencyCheck.dll, , CppCoreCheck.dllEnumIndex.dll, HResultCheck.dllи VariantClear.dll. Они проверяют наличие дефектов для проблем параллелизма, нарушений CppCoreGuidelines, неправильного использования значений enum в качестве индексов, HRESULT значений или VARIANT значений соответственно.

При сборке в командной строке можно использовать Esp.Extensions переменную среды для указания расширений EspXEngine. Например:

set Esp.Extensions=ConcurrencyCheck.dll;CppCoreCheck.dll;

Используйте точку с запятой (;) для разделителя расширений, как показано в примере. Конечная точка с запятой не нужна. Можно использовать абсолютный путь к файлу для расширения или указать относительный путь из каталога, содержащего EspXEngine.dll.

Подключаемый EspXEngine.dll модуль использует для ConcurrencyCheck.dll реализации проверок кода, связанных с параллелизмом. Эти проверки вызывают предупреждения в диапазоне C261XX, например C26100 до C26167.

Если вы создаете в окне командной строки разработчика, сначала задайте Esp.Extensions переменную среды, чтобы указать ConcurrencyCheck.dll расширение:

set Esp.Extensions=ConcurrencyCheck.dll

Затем используйте параметр /analyze:plugin EspXEngine.dll компилятора для использования подключаемого модуля EspXEngine.

Параметры анализа внешних файлов

Начиная с Visual Studio 2019 версии 16.10, можно указать различные правила анализа и поведение для внешних заголовков. /external:I/external:envИспользуйте параметры или /external:anglebrackets каталоги, чтобы указать каталоги как внешние каталоги. Все файлы, включенные с помощью #include внешнего каталога или его подкаталогов, считаются внешними заголовками. Дополнительные сведения см. в разделе /external (Внешние заголовки диагностика).

Анализ кода предоставляет следующие параметры для управления анализом внешних файлов:

/analyze:external-
Пропускает анализ внешних файлов заголовков. По умолчанию анализ кода анализирует внешние файлы заголовков так же, как и другие файлы. /analyze:external- При установке параметра анализ кода пропускает все файлы, указанные как внешние, кроме шаблонов из внешних файлов. Шаблоны, определенные во внешних заголовках, обрабатываются как не внешние с помощью /external:templates- параметра. Этот /external:Wn параметр не влияет на анализ кода. Например, анализ кода анализирует внешние файлы и сообщает о дефектах даже при /external:W0 указании.

/analyze:external:ruleset ruleset_files
Параметр ruleset_files задает один или несколько файлов с запятыми-разделителями правил, используемых для анализа внешних файлов. Дополнительные сведения о наборах правил см. в разделе "Параметры для наборов правил".

Существует переменная среды (CAExcludePath), которая предоставляет аналогичную, но проще возможность пропустить анализ файлов в каталогах, указанных в переменной среды. Если каталог указан как в параметре, так /external:* и в переменной CAExcludePath среды, он считается исключенным, и /analyze:external* параметры не будут применяться к нему.

Параметры журнала анализа

/analyze:autolog[-]
Этот флаг используется для включения создания файла журнала анализа для каждого из анализируемых исходных файлов. Файлы журналов теперь создаются по умолчанию, поэтому этот флаг в основном избыточный. При использовании он изменяет расширение журнала по умолчанию вместо *.pftlog .xml. Используется /analyze:autolog- для отключения ведения журнала в файлы.

/analyze:autolog:ext extension
Переопределяет расширение журнала анализа по умолчанию и использует extension его. Если вы используете .sarif расширение, файл журнала использует формат SARIF вместо формата XML по умолчанию.

/analyze:log log_path
Задает путь log_path к файлу журнала вместо автоматически созданного пути к файлу журнала. log_path Если путь имеет конечную обратную косую черту и ссылается на существующий каталог, анализ кода создает все файлы журнала в указанном каталоге. log_path В противном случае указывает путь к файлу. Путь к файлу указывает компилятору объединить журналы для всех проанализированных исходных файлов в указанный файл журнала. Если путь к файлу .sarif имеет расширение, файл журнала использует формат SARIF вместо формата XML по умолчанию. Это поведение можно переопределить с помощью параметра /analyze:log:format:*.

Параметры формата файла журнала

Начиная с Visual Studio 2019 версии 16.9, можно указать различные параметры формата журнала для анализа кода.

/analyze:log:format:xml
Принудительно использует формат журнала XML, который не относится к используемому расширению файла.

/analyze:log:format:sarif
Принудительно использует формат журнала SARIF, который не относится к используемому расширению файла.

Параметры содержимого файла журнала

Начиная с Visual Studio 2019 версии 16.9, можно указать различные параметры содержимого журнала для анализа кода.

/analyze:sarif:analyzedfiles[-]
Добавляет записи артефактов файлов в файл журнала SARIF для проанализированных файлов, которые не выдают предупреждения. Этот параметр по умолчанию отключен. Артефакты исходного файла и файлов, которые выдавали результаты, всегда включаются.

/analyze:sarif:configuration[-]
Добавляет записи конфигурации правила, чтобы определить, как пользователь переопределяет конфигурацию правила по умолчанию (отключено по умолчанию).

/analyze:log:compilerwarnings
Добавляет все дефекты подсистемы анализа, а также все предупреждения компилятора в файл журнала анализа. По умолчанию предупреждения компилятора не включаются в файл журнала анализа. Дополнительные сведения о предупреждениях компилятора во время анализа кода см. в параметре /analyze:only .

/analyze:log:includesuppressed
Добавляет в файл журнала анализа как отключенные предупреждения, так и неподдержительные предупреждения. По умолчанию отключенные предупреждения не включаются в файл журнала анализа. Если для анализа указаны файлы набора правил, предупреждения, отключаемые файлами набора правил, не включаются в журнал даже при /analyze:log:includesuppressed указании.

Параметры набора правил

/analyze:projectdirectory project_directory
Указывает текущий каталог проекта. Если набор правил (или элемент, который он включает) является именем файла, компилятор сначала ищет файл под указанным project_directory. Если он не найден, он выполняет поиск по указанному параметру ruleset_directories /analyze:rulesetdirectory, если таковой есть. Если набор правил (или элемент, который он включает) является относительным путем, компилятор сначала ищет файл в каталоге проекта. Если набор правил не найден, он выглядит в текущем рабочем каталоге. Этот параметр доступен начиная с Visual Studio 2019 версии 16.9.

/analyze:rulesetdirectory ruleset_directories
Задает разделенный точкой с запятой список путей поиска набора правил. Если набор правил (или элемент, который он включает) является именем файла, компилятор сначала ищет файл под project_directory указанным /analyze:projectdirectory, если таковой имеется, за которым следует указанный ruleset_directories. Этот параметр доступен начиная с Visual Studio 2019 версии 16.9.

/analyze:ruleset ruleset_files
Указывает один или несколько файлов набора правил, используемых для анализа. Этот параметр может сделать анализ более эффективным; подсистема анализа пытается исключить средства проверки, не имеющие активных правил, указанных в файлах набора правил перед выполнением. В противном случае подсистема запускает все включенные средства проверки.

/analyze:ruleset ruleset_file
Задает файл набора правил, используемый для анализа. Этот параметр может сделать анализ более эффективным; подсистема анализа пытается исключить средства проверки, не имеющие активных правил, указанных в файле набора правил перед выполнением. В противном случае подсистема запускает все включенные средства проверки.

Файлы набора правил, которые отправляются с Помощью Visual Studio, находятся в %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets.

В следующем примере настраиваемого набора правил обработчик анализа проверяет наличие C6001 и C26494 и сообщает о них как предупреждения.

Этот файл можно поместить в любое место, если в аргументе указан полный путь.

Этот файл можно поместить в любое место, если указать полный путь в аргументе или в каталогах, указанных в /analyze:projectdirectory параметрах или /analyze:rulesetdirectory параметрах.

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description="New rules to apply." ToolsVersion="15.0">
  <Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
    <Rule Id="C6001" Action="Warning" />
    <Rule Id="C26494" Action="Warning" />
  </Rules>
</RuleSet>

По умолчанию расширение файла для файлов набора правил — *.rulesetэто расширение. Visual Studio использует расширение по умолчанию при просмотре файлов набора правил. Однако можно использовать любое расширение.

Дополнительные сведения о наборах правил см. в разделе "Использование наборов правил", чтобы указать правила C++ для выполнения.

Замечания

Дополнительные сведения см. в разделе "Анализ кода для предупреждений C/C++" и "Анализ кода для предупреждений C/C++".

Установка данного параметра компилятора в среде разработки Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

  2. Выберите страницу общего свойства анализа кода> конфигурации.>

  3. Измените одно или несколько свойств анализа кода.

  4. Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.

Чтобы задать параметры анализа внешних файлов в Visual Studio 2019 версии 16.10 и более поздних версий:

  1. Откройте диалоговое окно Страницы свойств проекта.

  2. Выберите страницу свойств>конфигурации C/C++>External Includes.

  3. Задайте свойства.

    • Отключение анализа кода для внешних заголовков задает /analyze:external- параметр.

    • Набор правил анализа для внешних заголовков задает /analyze:external:ruleset path параметр.

  4. Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.

Установка данного параметра компилятора программным способом

  1. См. раздел EnablePREfast.

См. также

Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC