/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:ruleset
ruleset_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.dll
EnumIndex.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
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Выберите страницу общего свойства анализа кода> конфигурации.>
Измените одно или несколько свойств анализа кода.
Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.
Чтобы задать параметры анализа внешних файлов в Visual Studio 2019 версии 16.10 и более поздних версий:
Откройте диалоговое окно Страницы свойств проекта.
Выберите страницу свойств>конфигурации C/C++>External Includes.
Задайте свойства.
Отключение анализа кода для внешних заголовков задает
/analyze:external-
параметр.Набор правил анализа для внешних заголовков задает
/analyze:external:ruleset path
параметр.
Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.
Установка данного параметра компилятора программным способом
- См. раздел EnablePREfast.
См. также
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC