﻿# Фильтрация и обработка вывода анализатора при помощи файлов конфигурации диагностик \(\.pvsconfig\)

Файл конфигурации служит для отображения и фильтрации сообщений анализатора\. Также в нём можно задать дополнительные настройки анализа\. Использование данных файлов возможно только для проектов, написанных на C, C\+\+ или C\#\.

Файлы конфигурации поддерживаются плагинами для следующих IDE:

* Visual Studio;
* Rider\.

Утилиты, поддерживающие файлы конфигурации: 

* `PVS-Studio_Cmd.exe`;
* `CLMonitor.exe` \(только в режиме `analyze` или `analyzeFromDump`\); 
* C and C\+\+ Compiler Monitoring UI \(`Standalone.exe`\); 
* `CompileCommandsAnalyzer.exe` \(в режиме `analyze`\)\.

## Добавление/использование файлов конфигурации в IDE и других инструментах анализа

### Использование \.pvsconfig в Visual Studio

Для использования файла конфигурации в Visual Studio необходимо добавить его на уровне проекта или решения\. Для этого выделите интересующий проект или решение в окне **Solution Explorer** среды Visual Studio\. Выберите пункт контекстного меню **Add New Item\.\.\.** \. В появившемся окне выберите тип файла **PVS\-Studio Filters File**\.

![pvsconfig_ru/image1.png](https://import.viva64.com/docx/blog/pvsconfig_ru/image1.png)


> Если шаблона нет, то вы можете просто добавить в проект или решение обычный текстовый файл с расширением \`\.pvsconfig\`\\\.

Для каждого проекта/решения можно добавить несколько файлов конфигурации\.

Конфигурационные файлы, добавленные на уровне проекта, применяются ко всем файлам в проекте\. 

Добавление строки `//DISABLE_ANALYSIS_AFTER_BUILD` в файл `.pvsconfig` уровня решения скроет меню `Analysis After Build (Modified Files Only)` и отключит инкрементальный анализ для соответствующего решения\. Изменения вступят в силу при повторном открытии решения\.

### Использование \.pvsconfig файла в CLion

Специального шаблона для добавления файла конфигурации для CLion нет\.

Добавить файл конфигурации для CLion можно только на уровне проекта\. Чтобы использовать его в CLion, добавьте в папку `.PVS-Studio` новый файл с расширением `.pvsconfig` через контекстное меню **New \> File**\.

![pvsconfig_ru/image2.png](https://import.viva64.com/docx/blog/pvsconfig_ru/image2.png)

### Использование \.pvsconfig файла в Rider

Специального шаблона для добавления файла конфигурации для Rider нет\.

Добавить файл конфигурации для Rider можно только на уровне проекта\. Чтобы использовать файл конфигурации диагностик в Rider, добавьте в проект новый файл с расширением `.pvsconfig` через **Solution Explorer**\.

![pvsconfig_ru/image3.png](https://import.viva64.com/docx/blog/pvsconfig_ru/image3.png)

### Использование \.pvsconfig в PVS\-Studio\_Cmd\.exe и pvs\-studio\-dotnet

При анализе через `PVS-Studio_Cmd.exe` или `pvs-studio-dotnet` автоматически используются файлы конфигурации из анализируемого проекта или решения\. Также можно передать путь к дополнительному файлу `.pvsconfig` с помощью параметра `--rulesConfig` \(`-C`\):

```cpp
PVS-Studio_Cmd.exe -t ProjName.sln -C \path\to\.pvsconfig
pvs-studio-dotnet -t ProjName.sln -C /path/to/.pvsconfig
```

В этом случае при анализе учитываются настройки и из файлов в проекте/решении, и из файла, переданного в качестве аргумента\.

### Использование \.pvsconfig в CLMonitor\.exe

Путь к файлу конфигурации необходимо передать в качестве аргумента командной строки \(параметр `-c`\):

```cpp
CLMonitor.exe analyzeFromDump -d /path/to/compileDump.gz -c /path/to/.pvsconfig
```

### Использование \.pvsconfig в CompilerCommandsAnalyzer\.exe

Если вы используете утилиту `CompilerCommandsAnalyzer.exe`, то можете передать путь до `.pvsconfig` файла через параметр `-R`:

```cpp
CompilerCommandsAnalyzer.exe analyze ... -R /path/to/.pvsconfig
```

### Использование \.pvsconfig в Standalone\.exe

В `Standalone.exe` вы можете указать путь к файлу при запуске мониторинга\.

![pvsconfig_ru/image4.png](https://import.viva64.com/docx/blog/pvsconfig_ru/image4.png)

### Использование глобального файла \.pvsconfig

Глобальный файл конфигурации диагностик используется при проверке всех проектов\. Таких файлов конфигурации `.pvsconfig` может быть несколько, и все они будут использованы инструментами PVS\-Studio\.

Для добавления глобального файла конфигурации создайте файл с расширением `.pvsconfig` в папке: 

* Для Windows: `%APPDATA%\PVS-Studio`;
* Для Linux и macOS: `~/.config/PVS-Studio`\.

## Общий функционал файлов конфигурации

### Добавление записей в файл конфигурации

Задание настроек в файлах конфигурации производится при помощи специальных директив, начинающихся с символов `//`\. Каждая директива пишется с новой строки\.

Пример:

```cpp
//-V::122
//-V::123
```

Также существует возможность добавлять комментарии\. Для этого необходимо написать символ `#` в начало строки\.

Пример:

```cpp
# I am a comment
```

### Фильтрация срабатываний анализатора

#### Отключение отдельных диагностик

Для полного отключения определённой диагностики используется запись:

```cpp
//-V::number
```

`number` — номер диагностики, которую нужно выключить \(например, 3022\)\.

Пример использования:

```cpp
//-V::3022
```

В данном случае будут игнорироваться срабатывания диагностики [V3022](https://pvs-studio.ru/ru/docs/warnings/v3022/)\.

Для отключения нескольких диагностик перечислите номера через запятую:

```cpp
//-V::number1,number2,...,numberN
```

Пример:

```cpp
//-V::3022,3080
```

При использовании этой директивы будут полностью отключены диагностики [V3022](https://pvs-studio.ru/ru/docs/warnings/v3022/) и [V3080](https://pvs-studio.ru/ru/docs/warnings/v3080/)\.

#### Отключение диагностик из определённых категорий 

Для отключения диагностик некоторой категории используются следующие директивы: 

```cpp
//-V::GA
//-V::X64
//-V::OP
//-V::CS
//-V::MISRA
//-V::OWASP
```

Пояснение для каждой из категорий:

* **GA \(General Analysis\)** — диагностики общего плана\. Основной набор диагностических правил PVS\-Studio;
* **OP \(Optimization\)** — диагностики оптимизации\. Указания по повышению эффективности;
* **X64 \(64\-bit\)** — диагностики, позволяющие выявлять специфические ошибки, связанные с разработкой 64\-битных приложений, а также переносом кода с 32\-битной на 64\-битную платформу;
* **CS \(Customers' Specific\)** — узкоспециализированные диагностики, разработанные по просьбам пользователей\. По умолчанию этот набор диагностик отключен;
* **MISRA** — диагностики, разработанные в соответствии со стандартом [MISRA](https://misra.org.uk/) \(Motor Industry Software Reliability Association\)\. По умолчанию этот набор диагностик отключен;
* **OWASP** — диагностики, направленные на поиск проблем с безопасностью и проверяющие соответствие кода стандарту [OWASP ASVS](https://owasp.org/www-project-application-security-verification-standard/)\. По умолчанию отключено\.

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

Пример комбинации: 

```cpp
//-V::GA,MISRA
```

#### Отключение всех C\+\+ или C\# диагностик

Для отключения всех диагностик C\+\+ или C\# анализатора используются директивы: 

```cpp
//-V::C++
//-V::C#
```

#### Исключение предупреждений определённого уровня

Если требуется исключить срабатывания определённого уровня, используйте запись вида:

```cpp
//-V::number1,number2,...,numberN:level
```

* `number1`, `number2` и т\.д\. — номера диагностик, срабатывания которых нужно исключить \(например, 3022\)\.
* `level` — уровень предупреждения \(1, 2 или 3\)\.

Цифре 1 соответствуют срабатывания уровня **High**, цифре 2 — **Medium**, цифре 3 — **Low**\.

Можно исключать предупреждения сразу нескольких уровней\. Для этого нужно написать уровни через запятую\.

Пример:

```cpp
//-V::3022,5623:1,3
```

Эта запись позволит исключить срабатывания диагностик [V3022](https://pvs-studio.ru/ru/docs/warnings/v3022/) и [V5623](https://pvs-studio.ru/ru/docs/warnings/v5623/) уровня **High** и **Low**\.

#### Исключение предупреждений по подстроке в сообщении

Анализатор поддерживает возможность исключения предупреждений по номеру диагностики и подстроке, содержащейся в сообщении\.

Запись для подавления:

```cpp
//-V::number::{substring}
```

* `number` — номер диагностики, сообщение которой нужно подавить \(например, 3080\);
* `substring` — подстрока, содержащаяся в сообщении анализатора\.

При использовании такого шаблона будут игнорироваться срабатывания диагностик с номером `number`, сообщения которых содержат подстроку `substring`\.

Пример подавления по подстроке: 

```cpp
//-V::3022::{always true}
```

В данном случае будут отключены срабатывания [V3022](https://pvs-studio.ru/ru/docs/warnings/v3022/), в сообщении которых есть подстрока `always true`\.

#### Исключение предупреждений по уровню и подстроке в сообщении

Также можно добавить фильтрацию по уровню и подстроке\. Такая запись будет иметь вид:

```cpp
//-V::number1,number2,...,numberN:level:{substring}
```

* `number1`, `number2` и т\.д\. — номера диагностик, срабатывания которых нужно исключить \(например, 3022\);
* `level — уровень предупреждения (1, 2 или 3);`
* `substring` — подстрока, содержащаяся в сообщении анализатора\.

Цифре 1 соответствуют срабатывания уровня **High**, цифре 2 — **Medium**, цифре 3 — **Low**\.

Можно исключать предупреждения диагностик сразу нескольких уровней\. Для этого нужно написать уровни через запятую\.

Пример:

```cpp
//-V::3022,5623:1,3:{always true}
```

Будут исключены срабатывания уровня **High** и **Low **диагностик [V3022](https://pvs-studio.ru/ru/docs/warnings/v3022/), [V5623](https://pvs-studio.ru/ru/docs/warnings/v5623/), в сообщении которых есть подстрока `always true`\.

#### Исключение предупреждений из определённых категорий по уровням

Для исключения предупреждений некоторых категорий по уровням используется запись вида: 

```cpp
//-V::category1,category2,...,categoryN:level
```

* `category1`, `category2` и т\. д\. — имена категорий, срабатывания которых нужно исключить \(например, **GA**\)\. Перечень категорий и их описание можно найти в разделе [**Отключение диагностик из определённых категорий**](https://pvs-studio.ru/ru/docs/manual/6630/#ID7FCFDC76E0) этой документации;
* `level` — уровень предупреждения \(1, 2 или 3\)\.

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

Пример комбинации: 

```cpp
//-V::GA,MISRA:1,3
```

Будут исключены срабатывания уровня **High **и **Low** диагностик, которые относятся к категориям **GA** и **MISRA**\.

#### Включение отдельных диагностик

**Примечание**: Данная настройка доступна только для C, С\+\+ и C\# проектов\.

Для включения определённой диагностики используется запись:

```cpp
//+V::number
```

`number` — номер диагностики, которую нужно включить \(например, 3022\)\.

Пример использования:

```cpp
//+V::3022
```

В данном случае будут включены срабатывания диагностики [V3022](https://pvs-studio.ru/ru/docs/warnings/v3022/)\.

Для включения нескольких диагностик перечислите номера через запятую:

```cpp
//+V::number1,number2,...,numberN
```

Пример:

```cpp
//+V::3022,3080
```

При использовании этой директивы будут полностью включены диагностики [V3022](https://pvs-studio.ru/ru/docs/warnings/v3022/) и [V3080](https://pvs-studio.ru/ru/docs/warnings/v3080/)\.

#### Включение диагностик из определённых категорий 

**Примечание**: Данная настройка доступна только для C, С\+\+ и C\# проектов\.

Для включения диагностик некоторой категории используются следующие директивы: 

```cpp
//+V::GA
//+V::X64
//+V::OP
//+V::CS
//+V::MISRA
//+V::OWASP
```

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

Пример комбинации: 

```cpp
//+V::GA,MISRA
```

#### Добавление метки False Alarm для срабатываний на строки, содержащие указанный фрагмент

Добавление **False Alarm** метки для предупреждений на строки с некоторым фрагментом производится с помощью следующей директивы:

```cpp
//-V:substring:number
```

* `substring` — подстрока, содержащаяся в строке, на которую указывает анализатор;
* `number` — номер диагностики, сообщение которой нужно подавить \(например, 3080\)\.

**Примечание 1\.** Искомая подстрока \(`substring`\) не должна содержать пробелов\.

**Примечание 2\.** Сообщения, отфильтрованные данным способом, не будут удалены из отчёта\. Они будут отмечены как **False Alarm** \(FA\)\.

Пример использования:

```cpp
public string GetNull()
{
  return null;
}

public void Foo()
{
  string nullStr = GetNull();
  Console.WriteLine(nullStr.Length);
}
```

На данный код анализатор выдаст предупреждение: "[V3080](https://pvs-studio.ru/ru/docs/warnings/v3080/) Possible null dereference\. Consider inspecting 'nullStr'\."

Для добавления FA\-метки для срабатываний на такой код используйте в `.pvsconfig` следующую запись: 

```cpp
//-V:Console:3080
```

Такая директива добавит отметку False Alarm на все предупреждения [V3080](https://pvs-studio.ru/ru/docs/warnings/v3080/), указывающие на строку кода, в которой есть `Console`\.

Аналогичным образом можно добавлять отметку **False Alarm** на срабатывания сразу нескольких диагностик\. Для этого перечислите их номера через запятую:

```cpp
//-V:substring:number1,number2,...,number
```

Пример:

```cpp
//-V:str:3080,3022,3175
```

Сообщения диагностик [V3080](https://pvs-studio.ru/ru/docs/warnings/v3080/), [V3082](https://pvs-studio.ru/ru/docs/warnings/v3082/), [V3175](https://pvs-studio.ru/ru/docs/warnings/v3175/) будут помечены как **False Alarm**, если в строке, на которую указывает анализатор, есть подстрока `str`\.

#### Добавления хэш\-кода к метке False Alarm

С PVS\-Studio версии 7\.28 появилась возможность ставить дополнительный хэш\-код к метке **False Alarm**\. При изменении строки с этим хэш\-кодом предупреждения, выданные на эту строку, не будут отмечены как ложные срабатывания, так как хэш\-код изменённой строки отличается от хэш кода метки\. 

Эта настройка помогает распознавать ситуации, когда строка с меткой **False Alarm** изменяется\.

Для включения этой функции добавьте в файл конфигурации следующий флаг:

```cpp
//V_ENABLE_FALSE_ALARMS_WITH_HASH
```

В коде метка **False Alarm** c хэш\-кодом выглядит следующим образом:

```cpp
//-V817 //-VH"3652460326"
```

С версии PVS\-Studio 7\.30 появилась возможность для подавления только тех сообщений, к False Alarm метке которых поставлен дополнительный хэш\-код:

```cpp
//V_HASH_ONLY ENABLE
//V_HASH_ONLY ENABLE_VERBOSE
```

В случае применения данной настройки те строчки, которые имеют метку **False Alarm**, но не имеют хэш\-кода, не будут подавлены\.

Настройка `ENABLE` приведёт к попаданию одного на весь проект сообщения [V018](https://pvs-studio.ru/ru/docs/warnings/v018/) в отчёт\. В случае применения настройки `ENABLE_VERBOSE` такое предупреждение будет выдаваться на каждую строчку кода, в которой присутствует метка False Alarm без хэш\-кода\.

Выключение настройки выполняется следующим образом:

```cpp
//V_HASH_ONLY DISABLE
```

Данная ситуация может возникнуть в случае, если применение данной настройки необходимо только на определённой части кода\.

### Исключение файлов из анализа

Для исключения из анализа файла или группы файлов используйте шаблон:

```cpp
//V_EXCLUDE_PATH fileMask
```

`fileMask` — маска файла\.

Пример использования некоторых масок:

```cpp
//V_EXCLUDE_PATH C:\TheBestProject\thirdParty
//V_EXCLUDE_PATH *\UE4\Engine\*
//V_EXCLUDE_PATH *.autogen.cs
```

Начиная с версии 7\.34 PVS\-Studio можно использовать шаблон_ _`//V_ANALYSIS_PATHS` с режимом `skip-analysis`\.

Например:

```cpp
//V_ANALYSIS_PATHS skip-analysis=C:\TheBestProject\thirdParty
//V_ANALYSIS_PATHS skip-analysis=*\UE4\Engine\*
//V_ANALYSIS_PATHS skip-analysis=*.autogen.cs
```

С синтаксисом формирования масок можно ознакомится в [документации](https://pvs-studio.ru/ru/docs/manual/0014/)\.

### Исключение проектов из анализа

**Примечание: **Эта настройка доступна только в файлах конфигурации \(`.pvsconfig`\), которые расположены на уровне решения\. В других случаях она будет проигнорирована\.

Начиная с версии 7\.32, утилита `PVS-Studio_Cmd.exe` и плагин для Visual Studio поддерживают исключение из анализа проектов по шаблону:

```cpp
//V_EXCLUDE_PROJECT projMask
```

`projMask` — маска файла проекта\.

Пример использования некоторых масок:

```cpp
//V_EXCLUDE_PROJECT C:\TheBestProject\thirdParty\3rdparty.vcxproj
//V_EXCLUDE_PROJECT *\TOCSharp.csproj
//V_EXCLUDE_PROJECT *\elsewhere\*.*proj
```

Синтаксис формирования масок совпадает с синтаксисом, используемым для исключения файлов из анализа\. Исключить из проверки можно только `.vcxproj` и `.csproj` проекты\.

Также вы можете исключить проект из анализа, указав аналогичный путь для флага `//V_EXCLUDE_PATH`\.


> Эта опция влияет на работу только \`PVS\-Studio\_Cmd\.exe\`/\`pvs\-studio\-dotnet\` и плагинов для Visual Studio\\\.



### Игнорирование файлов конфигурации 

**Примечание:** Данная настройка доступна только для C и С\+\+ проектов\.

Начиная с версии 7\.34 PVS\-Studio поддерживает возможность игнорировать настройки, которые находятся в исходных файлах и файлах конфигурации диагностик `.pvsconfig`\. 

Для этого можно использовать флаг `//V_ANALYSIS_PATHS` с режимом `skip-settings`\.

Например:

```cpp
//V_ANALYSIS_PATHS skip-settings=*\path\to\folder\*
//V_ANALYSIS_PATHS skip-settings=*\path\*\custom_pvsconfig
//V_ANALYSIS_PATHS skip-settings=*custom_settings.h
```

Если необходимо исключить файлы из анализа и одновременно игнорировать настройки для этих файлов, можно использовать флаг `//V_ANALYSIS_PATHS` с режимом `skip`\.

Например:

```cpp
//V_ANALYSIS_PATHS skip=*\path\to\source_or_pvsconfig
```

С синтаксисом формирования масок можно ознакомится в [документации](https://pvs-studio.ru/ru/docs/manual/0014/)\.

### Изоляция настроек для каталогов

**Примечание:** данная настройка доступная только при использовании утилиты `pvs-studio-analyzer`\.

Начиная с версии 7\.36, утилита `pvs-studio-analyzer` поддерживает режим, при котором в каждом каталоге \(и его родительских каталогах\) для каждой единицы трансляции выполняется поиск файлов конфигурации правил \(`.pvsconfig`\)\. Каждый найденный файл `*.pvsconfig` будет применён для всех единиц трансляции в каталоге и его подкаталогах\. Для включения этого режима следует воспользоваться флагом командной строки `--apply-pvs-configs`\. Подробнее об этом можно узнать в [документации](https://pvs-studio.ru/ru/docs/manual/6615/) по утилите `pvs-studio-analyzer`\.

Вы можете изолировать настройки в каталоге от настроек из родительских директорий\. Это полезно, если вам необходимо отделить настройки в подпроектах или third\-party библиотеках\. В таком случае никакие файлы конфигурации правил из родительских каталогов не будут применены для указных директорий и их подкаталогов\.

Для изоляции настроек с помощью файла конфигурации правил есть два способа:

* через флаг `V_ANALYSIS_PATHS` с режимом `isolate-settings`\. Данную опцию можно указать в любом файле конфигураций правил\. Поддерживаются абсолютные и относительные пути\. Относительные пути раскрываются через путь до файла конфигураций правил, например:

```cpp
//V_ANALYSIS_PATHS isolate-settings=path/to/isolate;isolate-settings=ThirdParty
```

* через флаг `//V_ISOLATE_CURRENT_DIR`\. Включает изоляцию каталога, в котором расположен файл конфигурации с данным флагом\.

### Игнорирование глобальных файлов конфигурации

Перед запуском анализа `PVS-Studio_Cmd` формирует конфигурацию диагностических правил из:

* глобальных файлов конфигурации \(в папке `%APPDATA%\PVS-Studio` для Windows и в папке `~/.config/PVS-Studio` для Linux и macOS\);
* файла, переданного через опцию `--rulesConfig` \(`-C`\);
* файлов, добавленных в решение;
* файлов, добавленных в проект\.

Может возникнуть ситуация, когда глобальная конфигурация не должна применяться при анализе каких\-либо проектов или решений\. Для её отключения добавьте в соответствующий файл конфигурации следующий флаг:

```cpp
//IGNORE_GLOBAL_PVSCONFIG
```

Начиная с версии 7\.36, этот флаг поддерживается и в `pvs-studio-analyzer`\.

### Указание timeout\-а анализа файлов для проекта/solution/системы

При запуске анализа через интерфейс плагинов \([Visual Studio](https://pvs-studio.ru/ru/docs/manual/6522/#settings), [Rider и CLion](https://pvs-studio.ru/ru/docs/manual/0052/#settings)\) или в [C and C\+\+ Compiler Monitoring UI \(Standalone\.exe\)](https://pvs-studio.ru/ru/docs/manual/6522/#settings) имеется возможность указания timeout\-а по истечению которого анализ файла будет прерван\.  При превышении timeout\-а анализа в результаты анализа будет добавлено предупреждение [V006](https://pvs-studio.ru/ru/docs/warnings/v006/) с информацией о том, на каком файле был превышен timeout\.

Настройки timeout\-а анализа файлов можно указать и в `.pvsconfig`\. Например, этой строчкой указывается timeout в 10 минут \(600 секунд\):

```cpp
//V_ANALYSIS_TIMEOUT 600
```

Если в `.pvsconfig` указана строка с timeout\-ом равным 0, то файлы будут анализироваться без ограничения по времени\.

Благодаря настройке timeout\-ов через `.pvsconfig` файлы разных уровней, можно ограничить время анализа файлов в определенных проектах, solution\-ах или во всей системе\.:

* аргумент `--rulesConfig (-c)` в `PVS-Studio_Cmd.exe` \(переопределяет timeout анализа файлов для текущего анализа solution/проекта\);
* системный \(`%AppData%` в Windows, `~/.config` в Linux, macOS\); 
* solution \(`.sln`\);
* уровень проекта \(`.csproj`, `.vcxproj`\)\.

### Изменение уровня срабатываний диагностики

Предупреждения анализатора имеют три уровня достоверности: **High**,** Medium**, **Low**\. В зависимости от используемых в коде конструкций анализатор оценивает достоверность предупреждений и присваивает им соответствующий уровень в отчёте\.

В некоторых проектах поиск определённых типов ошибок может быть очень важен, независимо от степени достоверности предупреждения\. Бывает и обратная ситуация, когда сообщения малополезны, но совсем их отключать не хочется\. В таких случаях для диагностик можно вручную задать уровень **High**/**Medium**/**Low**\. Для этого следует использовать следующие директивы: 

* Директива `//V_LEVEL_1` изменяет уровень срабатываний на **High**;
* Директива `//V_LEVEL_2` изменяет уровень срабатываний на **Medium**;
* Директива `//V_LEVEL_3` изменяет уровень срабатываний на **Low**\.

Для изменения уровня используйте директиву следующего вида:

```cpp
//V_LEVEL_1::number
```

`number` — номер диагностики\.

Например, чтобы изменить уровень предупреждений для диагностики [V3176](https://pvs-studio.ru/ru/docs/warnings/v3176/) на третий, используйте запись:

```cpp
//V_LEVEL_3::3176
```

### Изменения текста сообщений анализатора

Для изменения подстроки в сообщении анализатора используйте следующий синтаксис:

```cpp
//+Vnnn:RENAME:{originalString:replacementString}, ...
```

* `Vnnn` — название диагностики, сообщение которой необходимо модифицировать \(например, [V624](https://pvs-studio.ru/ru/docs/warnings/v624/)\);
* `originalString` — исходная подстрока;
* `replacementString` — строка на которую нужно заменить\.

Разберём работу директивы на примере\. Диагностика [V624](https://pvs-studio.ru/ru/docs/warnings/v624/), встречая в коде число 3\.1415, предлагает заменить его на `M_PI` из библиотеки `<math.h>`\. Но в проекте используется специальная математическая библиотека, и нужно использовать математические константы именно из неё\. Для корректной работы следует добавить директиву в файл конфигурации\.

Эта директива будет иметь следующий вид: 

```cpp
//+V624:RENAME:{M_PI:OUR_PI},{<math.h>:"math/MMath.h"}
```

Теперь анализатор сообщит, что нужно использовать константу `OUR_PI` из заголовочного файла `math/MMath.h`\.

Существует возможность добавить строку к сообщению\.

Директива, позволяющая сделать это, имеет следующий вид:

```cpp
//+Vnnn:ADD:{message}
```

* `Vnnn` — название диагностики, сообщение которой необходимо модифицировать \(например, [V2003](https://pvs-studio.ru/ru/docs/warnings/v2003/)\);
* `message` — строка для добавления;

Разберём пример\. Для этого рассмотрим сообщение диагностики [V2003](https://pvs-studio.ru/ru/docs/warnings/v2003/): "Explicit conversion from 'float/double' type to signed integer type\."\.

Чтобы добавить дополнительную информацию в это сообщение, нужно использовать директиву следующего вида:

```cpp
//+V2003:ADD:{ Consider using boost::numeric_cast instead.}
```

Теперь анализатор будет выдавать модифицированное сообщение: "Explicit conversion from 'float/double' type to signed integer type\. Consider using boost::numeric\_cast instead\."\.

### Управление синхронизацией suppress файлов

При запуске анализа через интерфейс плагина [Visual Studio](https://pvs-studio.ru/ru/docs/manual/6522/#settings) или в [C and C\+\+ Compiler Monitoring UI \(Standalone\.exe\)](https://pvs-studio.ru/ru/docs/manual/6522/#settings) имеется возможность отключить синхронизацию suppress файлов с помощью настройки **Specific Analyzer Settings**/**DisableSynchronizationOfSuppressFiles**\.

Отключить синхронизацию также можно через `.pvsconfig` файл уровня решения\. Для этого необходимо добавить в соответствующий конфигурационный файл следующий флаг: 

```cpp
//DISABLE_SUPPRESS_FILE_SYNC
```

Для включения синхронизации через `.pvsconfig` независимо от значения настройки **DisableSynchronizationOfSuppressFiles** необходимо использовать флаг:

```cpp
//ENFORCE_SUPPRESS_FILE_SYNC
```


> Эта опция доступна только в файле конфигурации уровня решения и влияет на работу только \`PVS\-Studio\_Cmd\.exe\`/\`pvs\-studio\-dotnet\` и плагинов для Visual Studio\\\.



### Выбор версии PVS\-Studio для анализа

Начиная с версии 7\.24 утилита `PVS-Studio_Cmd.exe` и плагин для Visual Studio поддерживают возможность указать версию ядра PVS\-Studio для анализа C\+\+ проектов, если на компьютере установлено несколько версий PVS\-Studio\. 

Начиная с версии 7\.36 утилита `PVS-Studio_Cmd.exe` и плагин для Visual Studio поддерживают возможность указать версию ядра PVS\-Studio для анализа C\# проектов, если на компьютере установлено несколько версий PVS\-Studio\.

Для того, чтобы `PVS-Studio_Cmd.exe` запускал анализ на нужной версии ядра PVS\-Studio необходимо в файл `.pvsconfig` уровня решения добавить флаг `//PVS_VERSION::Major.Minor`, где

**Major** — мажорное число версии, а **Minor** — минорное число\.

Например:

```cpp
//PVS_VERSION::7.26
```

`PVS-Studio_Cmd.exe` вычисляет путь до ядра используя информацию из системного реестра, которую пишет инсталлятор при установке PVS\-Studio\.

**Для C\+\+ проектов минимальная поддерживаемая версия** значения настройки `PVS_VERSION` — это **7\.26 **\(минимальное значение для C\+\+ проектов было добавлено в версии 7\.36\)\. Это означает, что при использовании этой настройки при анализе C\+\+ проектов можно запустить версию ядра PVS\-Studio **7\.26** или выше\.  

**Для C\# проектов минимальная поддерживаемая версия** значения настройки `PVS_VERSION` — это **7\.15**\. Это означает, что при использовании этой настройки при анализе C\# проектов можно запустить только версию ядра PVS\-Studio **7\.15** или выше\.

В случае установки новой версии PVS\-Studio в уже существующую директорию, содержащую другую версию PVS\-Studio, номер версии в реестре для этой директории будет обновлён\.

Последняя установка PVS\-Studio, считается установкой по умолчанию\. А значит, если последней была установлена версия PVS\-Studio 7\.23, то такой же версии будут все плагины и `PVS-Studio_Cmd.exe`\. Следовательно, вы не сможете воспользоваться механизмом выбора версий ядра PVS\-Studio\. Поэтому, если вы хотите использовать старые версии PVS\-Studio \(7\.23 и ниже\), то вам нужно в начале установить их и только потом поставить последнюю версию PVS\-Studio 7\.24 или выше\. 

Для всех версий ниже 7\.24 необходимо в реестре прописать соотношение версии и пути до каталога установки этой версии, чтобы `PVS-Studio_Cmd.exe` смог найти путь до ядра PVS\-Studio\. Информация записывается в раздел `Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ProgramVerificationSystems\PVS-Studio\Versions`\.


> Эта опция доступна только в файле конфигурации уровня решения и влияет на работу только \`PVS\-Studio\_Cmd\.exe\`/\`pvs\-studio\-dotnet\` и плагинов для Visual Studio\\\.



### Приоритезация файлов конфигурации

Начина с версии 7\.25 утилита `PVS-Studio_Cmd.exe` и плагин для Visual Studio поддерживают возможность явно задать приоритет файлов конфигурации одного уровня\. Для этого необходимо использовать флаг `//CONFIG_PRIORITY::number`, где `number` — номер приоритета\. 

Начиная с версии 7\.36, этот флаг поддерживается в утилите `pvs-studio-analyzer`\.

Например:

```cpp
//CONFIG_PRIORITY::1
```

Чем меньше номер, тем приоритетней файл конфигурации\. Файлы, в которых нет данного флага, имеют минимальный приоритет\. Файлы имеющий одинаковый приоритет применяются в алфавитном порядке\. Например, среди файлов `Filter1.pvsconfig`, `Filter2.pvsconfig`, `Filter3.pvsconfig` настройки из `Filter3.pvsconfig` будут приоритетными\. 

Флаг `//CONFIG_PRIORITY` влияет только на файлы конфигурации одного уровня\. В порядке возрастания приоритета файлы настроек применяются так: 

1. Глобальный файл конфигурации;
1. Файлы конфигурации уровня решения;
1. Файлы конфигурации уровня проекта;
1. Файл, переданный через аргумент `--rulesConfig` \(`-c`\) утилите `PVS-Studio_Cmd`\. 


> Эта опция влияет на работу только \`PVS\-Studio\_Cmd\.exe\`/\`pvs\-studio\-dotnet\` и плагинов для Visual Studio\\\.



### Выполнение команд из CustomBuild task перед анализом

Чтобы PVS\-Studio перед анализом выполнил команды из [CustomBuild task](https://learn.microsoft.com/en-us/visualstudio/msbuild/custombuild-task?view=vs-2022), в файл `.pvsconfig` нужно добавить следующую директиву:

```cpp
//EXECUTE_CUSTOM_BUILD_COMMANDS
```

Эта директива применима только для `.pvsconfig` файлов, передаваемых через командную строку, а также расположенных на глобальном уровне или уровне решения\.

Рассмотрим случай, в котором директива может пригодиться\. 

Некоторые Visual C\+\+ проекты при сборке могут генерировать исходный код с помощью команд, записанных в **CustomBuild task**\. Запуск анализа без генерации этих файлов может привести к ошибкам\. Если нужно только сгенерировать файлы, то выполнять полную сборку смысла нет \(это может быть долго\)\. 

В таком случае будет полезно указать PVS\-Studio соответствующую директиву, чтобы анализатор сначала выполнил команды генерации файлов, а затем провёл анализ\.

### Подавление ошибок парсинга

Иногда анализатор может выдавать сообщение об ошибке парсинга на полностью компилирующийся проект\. Эти ошибки могут быть не критичны для качества анализа\. В таком случае их можно подавить\.

Ошибка парсинга имеет код:

* C\# анализатор — [V051](https://pvs-studio.ru/ru/docs/warnings/v051/)
* C и C\+\+ анализатора — [V001](https://pvs-studio.ru/ru/docs/warnings/v001/)

**Подавление V051 \(C\# анализатор\)**

C\# анализатор выдаёт V051 при наличии хотя бы одной ошибки компиляции\. Увидеть все ошибки можно запустив [command line версию анализатора](https://pvs-studio.ru/ru/docs/manual/0035/) с флагом `--logCompilerErrors`\. Синтаксис для подавления этих ошибок выглядит следующим образом:

`//V_EXCLUDE_PARSING_ERROR:V051:{"ProjectName": "MyProject", "ErrorCode": "CS0012", "Message": "Some message"}`

В данном случае для проекта \(`.csproj`\) **MyProject** будет подавлена ошибка компиляции с кодом CS0012 и сообщением `Some message`\.

Также не обязательно комбинировать информацию для подавления:

* `//V_EXCLUDE_PARSING_ERROR:V051:{"ProjectName": "MyProject"}` — подавить все ошибки на проекте MyProject
* `//V_EXCLUDE_PARSING_ERROR:V051:{"ErrorCode": "CS0012"}` — подавить все ошибки с кодом CS0012 для всех проектов
* `//V_EXCLUDE_PARSING_ERROR:V051:{"Message": "Some message"}` — подавить все ошибки с сообщением "Some message"\.

При указании сообщения вы можете воспользоваться масками\. Например:

`//V_EXCLUDE_PARSING_ERROR:V051:{Message: "Some*"}`

**Примечание:** на данный момент подавление ошибок парсинга доступно только для V051 \(C\# анализатор\)\.

### Игнорирование настроек анализа из Settings\.xml

В глобальном файле конфигурации [`Settings.xml`](https://pvs-studio.ru/ru/docs/manual/6653/) есть ряд опций, которые влияют на результат анализа\. Например, настройки выключения диагностических групп\.

Вы можете использовать флаг `//V_IGNORE_GLOBAL_SETTINGS ON` для того, чтобы настройки из `Settings.xml` не учитывались при анализе\. В этом случае включаются все диагностические группы и не применяются фильтры путей\.

Для гибкой настройки анализа используйте файлы конфигурации \(`.pvsconfig`\)\. 


> Эта опция доступна только в файле конфигурации уровня решения и влияет на работу только \`PVS\-Studio\_Cmd\.exe\` и плагинов для Visual Studio\\\.



### Использование каталога решения в качестве значения SourceTreeRoot

Вы можете использовать флаг `//V_SOLUTION_DIR_AS_SOURCE_TREE_ROOT` для того, чтобы включить использование каталога решения в качестве значения `SourceTreeRoot`\.

С настройкой `SourceTreeRoot` можно ознакомиться в [отдельной документации](https://pvs-studio.ru/ru/docs/manual/0027/)\.

Параметр является более приоритетным, чем `UseSolutionDirAsSourceTreeRoot` из файла настроек [Settings\.xml](https://pvs-studio.ru/ru/docs/manual/6653/)\.


> Эта опция доступна только в файле конфигурации уровня решения и влияет на работу только \`PVS\-Studio\_Cmd\.exe\`/\`pvs\-studio\-dotnet\` и плагинов для Visual Studio\\\.



### Использование каталога решения для построения относительных путей в кэше зависимостей компиляции

Начиная с PVS\-Studio версии 7\.34 вы можете использовать флаг `//V_SOLUTION_DIR_AS_DEPENDENCY_CACHE_SOURCE_TREE_ROOT` для того, чтобы включить использование каталога решения в качестве корневой части пути, который будет использован для построения относительных путей файлов в [кэше зависимостей компиляции](https://pvs-studio.ru/ru/docs/manual/0055/#cpp_dependency_cache)\. 

Этот флаг следует использовать в [режиме проверки списка файлов](https://pvs-studio.ru/ru/docs/manual/0055/#source_list) и в [режиме проверки модифицированных файлов\.](https://pvs-studio.ru/ru/docs/manual/0055/#modified_files) Данная настройка позволяет получить файлы кэшей зависимостей компиляции, которые затем можно использовать на машинах с отличающимся расположением проверяемых исходных файлов\. 

Эта настройка похожа на [`//V_SOLUTION_DIR_AS_SOURCE_TREE_ROOT`](https://pvs-studio.ru/ru/docs/manual/0005/#sln_as_srt), только относительные пути для файлов будут строиться в файлах кэшей зависимостей компиляции, а не в отчёте анализатора\. 


> Эта опция доступна только в файле конфигурации уровня решения и влияет на работу только \`PVS\-Studio\_Cmd\.exe\`/\`pvs\-studio\-dotnet\` и плагинов для Visual Studio\\\.



### Управление сортировкой suppress файлов

С версии PVS\-Studio 7\.27 внутреннее содержимое файлов подавления сортируется\. Это требуется для корректного использования в системе контроля версий и избегании проблем слияния файлов\.

Сообщения сортируются в следующем порядке: имя исходного файла, код диагностики, хэш строки, описание диагностики\.

Если вам требуется сохранить старое поведение и отключить сортировку, вы можете указать параметр `//V_DISABLE_SUPPRESS_FILE_SORTING`\.


> Эта опция доступна только в файле конфигурации уровня решения и влияет на работу только \`PVS\-Studio\_Cmd\.exe\`/\`pvs\-studio\-dotnet\` и плагинов для Visual Studio\\\.



### Секции настроек в \.pvsconfig

Существует возможность указания специфичных правил для определённой версии PVS\-Studio\.

Синтаксис:

```cpp
//V_SECTION_BEGIN
//V_WHEN_VERSION: <CONDITION_SEQUENCE>
....
//V_SECTION_END
```

Каждая секция содержит три обязательных элемента:

* `//V_SECTION_BEGIN` — метка начала секции;
* `//V_WHEN_VERSION:` — условие для определения применимости секции;
* `//V_SECTION_END` — метка конца секции\.

Синтаксис условий:

```cpp
<CONDITION_SEQUENCE> ::= <CONDITION> | <CONDITION_SEQUENCE> "|" <CONDTION>
<CONDITION> ::=  <SINGLE_VERSION_COMPARISON> | <RANGE_VERSIONS_COMPARISON>
<SINGLE_VERSION_COMPARISON> ::= <OP> <VERSION>
<RANGE_VERSIONS_COMPARISON> ::= "IN" <VERSION> "," <VERSION>
<OP> ::= "EQ" | "NE" | "LT" | "LE" | "GT" | "GE"
<VERSION> ::= <NUMBER> [ "." <NUMBER> ]
```

Условия в `V_WHEN_VERSION` могут быть скомбинированы с помощью символа `|` \(аналог оператора ИЛИ\)\. Каждое подвыражение вычисляется по отдельности\. Если хотя бы одно из них истинно, то секция со всеми директивами внутри неё применяется\. В противном случае — отбрасывается\.

Если необходимо указать не точную версию, а диапазон, то можно воспользоваться оператором `IN`\. Значения указываются через запятую включительно\. Например, так можно указать все версии с 7\.20 до 7\.25 \(включительно\):

```cpp
....
//V_WHEN_VERSION: in 7.20,7.25
....
```

Поддерживаемые операторы в условиях, их псевдонимы и описание:

|\*\*\\\#\*\*|\*\*Оператор\*\*|\*\*Alias\*\*|\*\*Описание\*\*|
|---|---|---|---|
|1|EQ|\\\=\\\=|Равно|
|2|NE|\\\!\\\=|Не равно|
|3|LT|<|Меньше|
|4|LE|<\\\=|Меньше или равно|
|5|GT|\\\>|Больше|
|6|GE|\\\>\\\=|Больше или равно|
|7|IN|отсутствует|Диапазон значений|

Регистр текстовых операторов не имеет значения\. Такая запись условия также будет корректной:

```cpp
....
//V_WHEN_VERSION: == 7.17 | In 7.20,7.25 | GT 8
....
```

**Ограничения:**

* функционал секций не доступен для параметров уровня решения;
* каждая открытая секция должна быть корректно закрыта \(конец файла не является корректным завершением секции\);
* вложенные секции не допускаются;
* при сравнении версий допускается использовать только мажорную и минорную версии анализатора, разделённые точкой;
* условия могут быть использованы только после открытия секции;
* управляющие директивы допустимо использовать только после условия\.

**Примечания:**

* директивы вне секций применяются для всех версий;
* при указании только Major версии, Minor будет неявно считаться как 0;
* при использовании старой версии анализатора \(до 7\.31\) все директивы будут применяться вне зависимости от наличия секций;
* в случае некорректной работы с секциями будет выдана соответствующая ошибка\.

Пример секции:

```cpp
//V_SECTION_BEGIN
//V_WHEN_VERSION: eq 7.30 | in 7.32,7.35 | gt 8
//+V::860
//V_ASSERT_CONTRACT
//-V::1100
//V_SECTION_END
```

### Обнаружение начальной позиции сдвига строк \(для V002\)

Начиная с версии 7\.35 PVS\-Studio поддерживает возможность вывода позиции, с которой начался сдвиг\. Механизм будет полезен, если позиции предупреждений анализатора указывают на неправильные строки\.

Чтобы вывести начальные позиции сдвига, добавьте флаг `//+V002,VERBOSE`\. Анализатор будет выдавать расширенное сообщение [V002](https://pvs-studio.ru/ru/docs/warnings/v002/) на каждый первый потенциальный сдвиг в файле\. Сообщение будет содержать строку, которую анализатор ожидал увидеть на указанной позиции\.

Пример:

```cpp
#include <iostream>
//+V002,VERBOSE
#pragma \
\
warning(push)
// The message V002 will be output here
void bar(int i) // This is the first line for which we detected a shift
{
  auto x = i % 5;
// This would be the wrong position for V609
  if ( i/x) // This is the correct position of V609
    std::cout << "bar" << std::endl;
}
void x()
{
    bar(5);
}
```

**Важно**: анализатор не всегда может корректно вычислить позицию начала сдвига\. Это связано с особенностями сравнения исходного и препроцессированного файла, где требуется учитывать раскрытие макросов и дополнительную информацию, которую подставляет препроцессор в `.i` файл\.

### Управление кэшем зависимостей компиляции

Начиная с PVS\-Studio версии 7\.35 появилась возможность управлять директорией сохранения и построения относительных путей для файлов [кэша зависимостей компиляции](https://pvs-studio.ru/ru/docs/manual/0055/#cpp_dependency_cache)\.

Для указания директории сохранения файлов кэша используйте флаг `//V_DEPENDENCY_CACHE_ROOT`\. Данная настройка позволяет централизовать хранение кэшей зависимостей компиляции разных проектов\.

Используйте флаг `//V_DEPENDENCY_CACHE_SOURCE_ROOT` для указания директории используемой в качестве корневой части пути, который будет использован для построения относительных путей файлов в кэше зависимостей компиляции\. Данная настройка позволяет получить файлы кэшей зависимостей компиляции, которые затем можно использовать на машинах с отличающимся расположением проверяемых исходных файлов\. 

Эти флаги следует использовать в [режиме проверки списка файлов](https://pvs-studio.ru/ru/docs/manual/0055/#source_list) и в [режиме проверки модифицированных файлов\.](https://pvs-studio.ru/ru/docs/manual/0055/#modified_files) 

Пример использования:

```cpp
//V_DEPENDENCY_CACHE_ROOT C:\Project\cache
//V_DEPENDENCY_CACHE_SOURCE_ROOT C:\Project
```


> Эта опция доступна только в файле конфигурации уровня решения и влияет на работу только \`PVS\-Studio\_Cmd\.exe\`/\`pvs\-studio\-dotnet\` и плагинов для Visual Studio\\\.

### Режим отслеживания исходных файлов в кэше зависимостей

В PVS\-Studio 7\.35 появилась возможность указывать режим отслеживания исходных файлов в кэше зависимостей компиляции\. Для этого используется флаг `//V_DEPENDENCY_CACHE_TRACKING_MODE`\. Он может принимать одно из следующих значений:

* **ModifiedFilesOnly** — в хэше отслеживаются только модификации исходных файлов\.
* **ModifiedAndWarningsContainingFiles** — дополнительно отслеживаются файлы с предупреждениями, найденными в предыдущих прогонах анализа\. Исходный файл будет анализироваться до тех пор, пока в нем содержатся предупреждения анализатора\.
* **Disabled** — отключает отслеживание файлов и обновление кэша зависимостей\.

Если значение этого флага не **Disabled**, то в плагине для Visual Studio появляется возможность запускать анализ модифицированных файлов через пункт меню **Extension \> PVS\-Studio \> Check \> Modified Files **и пункт **Analyze Modified Files with PVS\-Studio** в контекстном меню решений и проектов\.

При использовании этого флага кэш зависимостей компиляции будет обновляться независимо от режима анализа — как при анализе модифицированных файлов, так и в обычном режиме\.


> Эта опция доступна только в файле конфигурации уровня решения и влияет на работу только \`PVS\-Studio\_Cmd\.exe\`/\`pvs\-studio\-dotnet\` и плагинов для Visual Studio\\\.



### Разметка предупреждений, связанных с потенциальными проблемами безопасности

Начиная с PVS\-Studio версии 7\.37, появилась возможность выделить дополнительной маркировкой предупреждения, относящиеся к потенциальным проблемам безопасности и классифицируемые согласно ГОСТ Р 71207\-2024, в поле `SAST` в результатах анализа\. Чтобы сделать это, нужно добавить флаг `//V_SEC_ID` с режимом `SHOW`:

```cpp
//V_SEC_ID: SHOW
```

Для деактивации настройки воспользуйтесь этим же флагом с режимом `HIDE`:

```cpp
//V_SEC_ID: HIDE
```

Пример:

```cpp
void func()
{
  const wchar_t wstr[] = L"12345";
  printf("%s\n", wstr);
}
```

На данный код анализатор выдаст предупреждение: [V576](https://pvs-studio.ru/ru/docs/warnings/v576/) Consider checking the second actual argument of the 'printf' function\. The pointer to string of char type symbols is expected\.

При включении настройки анализатор добавит идентификатор `SEC-STR-FORMAT` в поле `SAST` этого предупреждения\.

### Использование старого С\+\+ парсера

Начиная с PVS\-Studio версии 7\.38 для анализа С и С\+\+ проектов используется новая реализация парсера языка\. Новый парсер обеспечивает более точную обработку шаблонных конструкций, улучшенный разбор стандартной библиотеки и кода на современных стандартах языка C\+\+\. 

Если вы столкнулись с ошибками или замедлениями анализа после обновления PVS\-Studio на версию 7\.38, то вы можете вернуть использование старого варианта парсера\. Для этого добавьте флаг `//V_USE_OLD_PARSER`\. Пожалуйста, сообщите в [техническую поддержку](https://pvs-studio.ru/ru/about-feedback/) о любых проблемах с анализом\. Это поможет нам улучшить работу нового парсера и сделать его более стабильным\.

### Отключение создания шаблона С\+\+

Отключает подстановку параметров шаблона при анализе C\+\+ кода\. Это снижает потребление оперативной памяти, но анализ становится менее тщательным\. 

Пример использования:

```cpp
//V_DISABLE_TEMPLATE_INSTANTIATION
```

### Режим перезаписи настроек

\[Release 7\.39\] Добавлена возможность перезаписи настроек в файлах с более высоким приоритетом из файлов с менее высоким приоритетом\. 

Для этого настройку из файла с менее высоким приоритетом \(та, которая перезаписывает\) нужно обернуть в следующую конструкцию:

```cpp
```
//V_OVERRIDE ON
//Перезаписывающие настройки
//V_OVERRIDE OFF
```
```

При этом аналогичные настройки из файлов с более высоким приоритетом \(те, которые перезаписываются\) нужно обернуть в следующую конструкцию:

```cpp
```
//V_ALLOW_OVERRIDE ON
//Перезаписываемые настройки
//V_ALLOW_OVERRIDE OFF
```
```

В обоих конструкциях можно перечислять несколько настроек\.

Механизм перезаписи не будет работать с настройками, которые накапливают значения, потому что значения не перезаписываются, а лишь суммируются\. Например:

```cpp
V_EXCLUDE_PATH
V_EXCLUDE_PROJECT
V_ANALYSIS_PATHS
V_EXCLUDE_PARSING_ERROR
```

Если настройки, помеченные конструкцией `V_OVERRIDE` пытаются перезаписать настройки из файла с более высоким приоритетом которые, в свою очередь, не помечены с помощью конструкции `V_ALLOW_OVERRIDE`, то выдастся ошибка [V020](https://pvs-studio.ru/ru/docs/warnings/v020/)\.


> Эта опция влияет на работу только \`PVS\-Studio\_Cmd\.exe\`/\`pvs\-studio\-dotnet\` и плагинов для Visual Studio\\\.

### Псевдонимы для заголовочных файлов 

\[Release 7\.42\] Добавлена возможность добавления псевдонимов для заголовочных файлов\.

В некоторых решениях для Visual Studio может находится несколько проектов, включающих в себя одни и те же файлы\. Анализ может не проходить корректно на таких проектах из\-за особенности препроцессирования \(PVS\-Studio опирается на препроцессирование файлов для получения единиц трансляции для анализа\)\. Она заключается в том, что при препроцессировании совместно используемого файла включаемые в него заголовки могут раскрываться относительно другого проекта\. 

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

`//V_INCLUDE_ALIAS source:"..\A.cpp", include-original:"stdafx.h", include-alias:"Project2\stdafx.h"`

В этом примере общим файлом является `..\A.cpp`:  путь до него указывается относительно файла анализируемого проекта\. `stdafx.h` \- файл, включаемый внутрь `..\A.cpp`\. ` Project2\stdafx.h` — файл, который подразумевается при включении и путь до него указывается относительно файла `..\A.cpp`\.

Эта настройка применяется только к файлам `pvsconfig` уровня проекта\. 


> Эта опция влияет на работу только \`PVS\-Studio\_Cmd\.exe\`/\`pvs\-studio\-dotnet\` и плагинов для Visual Studio\\\.