Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
Удаление неактуальных маркеров...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

Удаление неактуальных маркеров подавления из кодовой базы

24 Дек 2025

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

Накопление неактуальных маркеров подавления засоряет код и может привести к тому, что появившееся в том же месте новое предупреждение останется незамеченным.

Для очистки кодовой базы от неактуальных маркеров в пакете поставки анализатора PVS-Studio предусмотрена специальная утилита — pvs-fp-cleaner.

Удаляемые маркеры подавления

Анализатор PVS-Studio для подавления ложноположительных (false positive) предупреждений поддерживает управляющие комментарии вида:

//-Vwarning-number

где warning-number — номер диагностического правила.

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

if (a == b && a == b && 0 / 0 == 0) //-V501 //-V609

Если для подавления ложного срабатывания используется механизм хэш-кода, то для удаления также рассматриваются следующие маркеры:

//-VH"hash"

где hash — hash-код строки без учета комментариев.

Пример маркера с хэш-кодом:

if (a == b && a == b && 0 / 0 == 0) //-V501 //-V609 //-VH"12345678"

Сбор информации о неактуальных маркерах

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

На текущий момент сбор информации возможен только с помощью утилит pvs-studio-analyzer / CompilerCommandsAnalyzer.

Утилита pvs-studio-analyzer / CompilerCommandsAnalyzer:

pvs-studio-analyzer analyze --redundant-false-alarms=/path/to/report.json \
                            --sourcetree-root=/path/to/project-root \
                            ....

В результате будет сформирован отчёт о неактуальных маркерах подавления.

Необходимые флаги:

  • redundant-false-alarms — путь до генерируемого отчёта о неактуальных маркерах подавления;
  • sourcetree-root — флаг для указания корневой директории (/path/to/project) проекта для составления относительных путей.

Автоматическое удаление неактуальных маркеров

Для автоматического удаления неактуальных маркеров подавления из кодовой базы в составе дистрибутива предоставляется утилита pvs-fp-cleaner.

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

После анализа проекта и получения отчёта можно запустить утилиту очистки, указав следующие аргументы:

pvs-fp-cleaner cleanup \
               --sourcetree-root=/path/to/project \
               PATH...

где:

  • cleanup — режим работы утилиты;
  • PATH... — список путей к отчётам о неактуальных маркерах подавления;
  • sourcetree-root — путь к корневой директории проекта для преобразования относительных путей из отчётов с разных платформ.

Пример запуска:

pvs-fp-cleaner cleanup \
               --sourcetree-root=/home/user/project \
               /home/user/windows_report.json \
               /home/user/linux_report.json \
               /home/user/macOS_report.json

Запуск утилиты в режиме автоматического удаления неактуальных маркеров рекомендуется производить для кодовой базы, отслеживаемой системой контроля версий (Git, SVN, Mercurial и т.п.). Если проект не управляется такой системой, то крайне желательно сделать резервную копию исходных файлов.

Слияние отчётов о неактуальных маркерах

При необходимости слияния нескольких отчётов о неактуальных маркерах, например, для кроссплатформенного проекта, можно также воспользоваться утилитой pvs-fp-cleaner.

pvs-fp-cleaner merge \
               --sourcetree-root=/path/to/project \
               --output-file=/path/to/merged_report.json \
               PATH...

где:

  • merge — режим работы утилиты;
  • sourcetree-root — путь к корневой директории проекта для преобразования относительных путей из отчётов с разных платформ. Также используется для того, чтобы производить слияние информации на одинаковых файлах при анализе с разных платформ;
  • output-file — путь до результирующего отчёта после слияния;
  • PATH... — список путей к отчётам о неактуальных маркерах подавления.

Пример запуска:

pvs-fp-cleaner merge \
               --sourcetree-root=/home/user/project \
               --output-file=/home/user/merged_report.json \
               /home/user/windows_report.json \
               /home/user/linux_report.json \
               /home/user/macOS_report.json

Формирование отчёта для предпросмотра

Перед удалением маркеров подавления может быть полезно оценить масштаб изменений в кодовой базе. С помощью утилиты можно сформировать отчёт для предварительного просмотра найденных неактуальных маркеров.

Получить такой отчёт можно с помощью режима report:

pvs-fp-cleaner report \
               --sourcetree-root=/home/user/project \
               --output-file=/home/user/report_for_IDE_plugin.json \
               PATH...

где:

  • report — режим работы утилиты;
  • sourcetree-root — путь к корневой директории проекта для преобразования относительных путей из отчётов с разных платформ. В режиме report является обязательным только при формировании отчёта из "сырых" отчётов ядер;
  • output-file — путь до результирующего отчёта;
  • PATH... — список путей к отчётам о неактуальных маркерах подавления.

Сформированный отчёт можно открыть в IDE с помощью предоставляемых плагинов: