Pvs что это за программа

Формат файла PVS — описание, как открыть?

Файл формата PVS открывается специальными программами. Чтобы открыть данный формат, скачайте одну из предложенных программ.

Чем открыть файл в формате PVS

Тип файла: Parallels Desktop Configuration File Разработчик: Parallels Категория: Настройки

Хранит настройки конфигураций для Parallels Desktop — программы, позволяющей запускать Windows или Linux на компьютерах Mac, основанных на Intel. Загружается виртуальной машиной Parallels при открытии программы.

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

Чем открыть файл в формате PVS (Parallels Desktop Configuration File)

Источник: www.azfiles.ru

PVS-Studio — статический анализатор кода

PVS-Studio — это плагин для Microsoft Visual Studio, обеспечивающий выявления ошибок в исходном коде программ, написанных на языках С, C++ и C#.

Что такое PVS-Studio?

В некотором смысле часть функционала присутствует также во всем известно плагине ReSharper (R#) — дополнение (плагин), разработанное компанией JetBrains для повышения продуктивности работы в Microsoft Visual Studio.

При всем это сравнить продукты не следует. PVS-Studio – является оптимизированным и строго заточенным для выявление ошибок в коде продуктом.

PVS-Studio выполняет статический анализ кода и генерирует отчёт, помогающий программисту находить и устранять ошибки. PVS-Studio выполняет широкий спектр проверок кода, но наиболее силён в поисках опечаток и последствий неудачного Copy-Paste и т.д.

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

Основная же ценность PVS-Studio, на мой взгляд, в том, что он не только показывает наличие ошибок, но и поясняет их причины, а также показывает возможные варианты исправления этих ошибок. Для программистов плагин PVS-Studio может рассматриваться как дополнительная база знаний.

После установки PVS-Studio он встраивается в установленные версии Microsoft Visual Studio и доступен через главное меню. Работа плагина представлена на скриншоте ниже.

Visual Studio 2015 и плагин PVS-Studio

Сканирование может запускаться как в ручном, так и автоматическом режиме.

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

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

PVS-Studio — статический анализатор кода

Некоторые интересные особенности PVS-Studio приведены ниже.

Особенности PVS-Studio

Поддерживаемые языки и компиляторы

  • Windows. Visual Studio 2017 C, C++, C++/CLI, C++/CX (WinRT), C#
  • Windows. Visual Studio 2015 C, C++, C++/CLI, C++/CX (WinRT), C#
  • Windows. Visual Studio 2013 C, C++, C++/CLI, C++/CX (WinRT), C#
  • Windows. Visual Studio 2012 C, C++, C++/CLI, C++/CX (WinRT), C#
  • Windows. Visual Studio 2010 C, C++, C++/CLI, C#
  • Windows. MinGW C, C++
  • Windows/Linux. Clang C, C++
  • Linux. GCC C, C++

Бесплатная лицензия PVS-Studio

Продукт PVS-Studio разработан фирмой ООО «СиПроВер» – это наши соотечественники из города Тулы.

Данный продукт изначально был только платным и достаточно дорогим, но в настоящее время он доступен бесплатно для академических и Open source-проектов. Для использования бесплатной версии PVS-Studio в качестве плагина к Visual Studio необходимо во первых активировать сам плагин, используя следующий лицензионный ключ:

Name: PVS-Studio Free

Key: FREE-FREE-FREE-FREE

Во вторых необходимо внести правки во все компилируемые файлы вашего проекта. Имеются в виду файлы с расширениями c, cc, cpp, cs и так далее. Заголовочные h-файлы менять не требуется.
Вы должны вписать в начало каждого файла две строки с комментарием.

Это своего рода плата за возможность бесплатного использования анализатора PVS-Studio.

Комментарии для открытых бесплатных проектов:

// This is an open source non-commercial project. Dear PVS-Studio, please check it. // PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com

Чтобы не делать это руками, тем более если в вашем проекте много файлов, то вы можете воспользоваться вспомогательной утилитой. Вы должны будете указать ей какой комментарий вставлять и каталог с кодом.

Затем утилита рекурсивно обойдет все файлы в папке и вложенных папках, добавляя в файлы с исходным кодом соответствующие комментарии.

Читайте также:
E staff что это за программа

Скачать утилиту (вместе с исходным кодом) можно здесь.

Проект утилиты открывается в Microsoft Visual Studio, компилируется и используется для вашего проекта.

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

Утилита автокомментирования CSharp файлов для бесплатной работы PVS-Studio

После того как комментарии добавлены к исполняемым файла, плагин PVS-Studio может использоваться для статического анализа кода неограниченное число раз.

Вы также можете ознакомиться с другими статьями:

  • Программа «Редактор M3U» (M3Ueditor)
  • Visual Studio 2015: лучшие дополнения
  • Нумерация версий программного обеспечения
  • dotPeek — бесплатный декомпилятор от JetBrains
  • ILSpy — open source альтернатива .NET Reflector

Источник: it-enginer.ru

Чем PVS-Studio может помочь инди-разработчикам

В процессе инди-разработки любой энтузиаст или даже целая группа сталкивается с одной серьёзной проблемой — с необходимостью поиска ошибок в коде игры. Ресурсы больших компаний на тестирование и долгую отладку недоступны абсолютному большинству инди-разработчиков или даже инди-студий. И как раз с этим может помочь широкий список инструментов QA кода.

Среди которых немаловажным является статический анализ кода. О нем и пойдёт речь в этой статье. А конкретно, хотелось бы рассказать о том, как PVS-Studio может помочь инди-разработчикам со сложным процессом поиска ошибок.

Начнем с краткого описания того, что такое статический анализ. Это процесс выявления ошибок или недочетов и подозрительных мест в исходном коде программ. Самой очевидной аналогией для этого процесса будет код-ревью. Только вместо вашего коллеги код проверяет программа, которая не устанет и у которой не «замылится» глаз.

PVS-Studio, в свою очередь, это как раз статический анализатор, который ищет ошибки в исходном коде программ, написанных на C, C++, C# и Java. Кроме поиска ошибок PVS-Studio имеет диагностики, которые подсчитывают некоторые метрики кода, отлавливает использование bad practices (например, нарушение «The Law of The Big Two»: V690)

Как это выглядит на практике

Для наглядности приведу две вариации одной и той же ошибки, деления на ноль, на языке C++.

Найти деление на ноль может быть очень просто, если выглядеть оно будет вот так:

int x = 123;
int div = 3;
int y = x / (3 — div);

Хотя инструментарий самой Visual Studio молчит на таком простейшем примере:

3AR8MU0

PVS-Studio легко обнаруживает эту ошибку:

MhjCzYJ

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

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

template class numeric_limits .
>

namespace boost .
>

namespace boost namespace hash_detail template void dsizet(size_t x) size_t length = x / (limits::digits — 31); // >
>
>

И такое деление на ноль также будет обнаружено анализатором: V609 Divide by zero. Denominator ‘limits ::digits — 31’ == 0. ConsoleApplication.cpp 12

Кто-то может подумать, что разработка игр это не rocket science. Будет там ошибка, ну и ничего страшного -если найдётся, поправим. Но когда несколько дней пытаешься отловить баг в коде, который был написан неделю/месяц/год назад, отношение к ошибкам становится уже не таким легкомысленным. И чем дольше ошибка сохраняется в продукте, тем дороже она стоит, а уж если она достигнет пользователя, то можно заработать не только бессонные ночи дебага, но и репутационные потери.

lwec7mP

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

Далее приведу несколько примеров ошибок, которые PVS-Studio обнаружил в исходном коде достаточно известных open-source игровых проектов. Ведь никто не застрахован от ошибок.

Пример № 1 (C++)

Эта ошибка пряталась в исходном коде «Bullet Physics SDK», который использовался при разработке «Red Dead Redemption», а также для разработки спецэффектов в «Шерлоке Холмсе» Гая Ричи.

Более того, эта ошибка приводила к реальному багу в работе движка, из-за неё силы могли применяться к объектам не с той стороны. Взглянем на ошибку:

struct eAeroModel
enum _
V_Point,
V_TwoSided,
.
END
>;
>;

void btSoftBody::addAeroForceToNode(. )
.
if (. )
if (btSoftBody::eAeroModel::V_TwoSided)
.
>
.
>
.
>

V768 The enumeration constant ‘V_TwoSided’ is used as a variable of a Boolean-type. btSoftBody.cpp 542

Итак, в этом участке кода забыли произвести сравнение со значением перечисления. Вместо этого проверялось само значение перечисления V_TwoSided.

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

if (m_cfg.aeromodel == btSoftBody::eAeroModel::V_TwoSided)
.
>

Почитать подробнее об ошибках, найденных в «Bullet Physics SDK» с помощью PVS-Studio можно в этой статье.

Пример № 2 (С++)

Абсолютно аналогичную ошибку я описывала в своей недавней статье «Amnesia: The Dark Descent или как забыть поправить копипасту». Разработчики упомянутой серии игр как раз перед выходом новой части «Amnesia: Rebirth» выложили на GitHub исходный код двух первых частей.

Перейдём к самой ошибке:

void cLuxEnemyMover::UpdateMoveAnimation(float afTimeStep)
.
if(prevMoveState != mMoveState)
.
//Backward
if(mMoveState == eLuxEnemyMoveState_Backward)
.
>
.
//Walking
else if(mMoveState == eLuxEnemyMoveState_Walking)
bool bSync = prevMoveState == eLuxEnemyMoveState_Running
|| eLuxEnemyMoveState_Jogging
? true : false;
.
>
.
>
>

Читайте также:
Jivo это что за программа

На этот код и его продолжение (else-if продолжаются и дальше) анализатор выдал несколько похожих предупреждений вида:

V768 The enumeration constant ‘eLuxEnemyMoveState_Jogging’ is used as a variable of a Boolean-type. LuxEnemyMover.cpp 672

Это предупреждение выдавалось на следующую строку:

bool bSync = prevMoveState == eLuxEnemyMoveState_Running
|| eLuxEnemyMoveState_Jogging
? true : false;

В этом случае потерялось сравнение значения переменной prevMoveState с элементом перечисления eLuxEnemyMoveState_Jogging. В оригинале это все было еще и записано в одну строку.

Скорее всего программист просто писал код по ходу своих мыслей и написал выражение так, как и думал: «prevMoveState должно быть равно eLuxEnemyMoveState_Running или eLuxEnemyMoveState_Jogging». Ну и к тому же, условный тернарный оператор тут лишний, выражение и так является логическим и вернёт или true или false.

Пример №3 (Java)

Следующая ошибка была найдена PVS-Studio в исходном коде клиент-серверного приложения XMage для легендарной «Magic: The Gathering».

V6008 Null dereference of ‘savedSpecialRares’. DragonsMaze.java (230)

Тут происходит разыменовывание нулевой ссылки savedSpecialRares. Скорее всего подразумевалось, что если этот контейнер пуст, то при вызове функции в него нужно добавить определённые редкие карты. Более того, savedSpecialRares изначально объявляется пустой коллекцией и нигде больше не переприсваивается. Поэтому значение null для неё попросту невозможно. В итоге этот метод всегда будет возвращать пустую коллекцию, никогда не выполняя условия savedSpecialRares == null.

Наиболее вероятный вариант исправления этой ошибки:

if (savedSpecialRares.isEmpty()) .
>

Эта ошибка рассматривалась в статье «Проверка кода XMage и почему недоступны специальные редкие карточки для коллекции Dragon’s Maze». И как раз из-за этой ошибки в этой игре возможно не удастся получить те самые редкие карточки.

Пример № 4 (C#)

И приведу еще один пример, скорее всего влияющий на логику работы игры. Эта ошибка была допущена в популярном музыкальном таппере «osu!».

protected override void CheckForResult(. )
.
ApplyResult(r =>
if (holdNote.hasBroken
(result == HitResult.Perfect || result == HitResult.Perfect))
result = HitResult.Good;
.
>);
>

V3001 There are identical sub-expressions ‘result == HitResult.Perfect’ to the left and to the right of the ‘||’ operator. DrawableHoldNote.cs 266

Судя по условию, если зажимание «ноты» прервалось и результат был Perfect, то надо снизить результат до Good. Но почему-то результат дважды проверяется на Perfect. Заглянем в возможные значения этого перечисления:

public enum HitResult
None,
Miss,
Meh,
Ok,
Good,
Great,
Perfect,
>

Видно, что между оценкой Good и Perfect, есть еще такая оценка, как Great. Возможно, вместо второй проверки на Perfect должна была быть именно проверка на Great. В таком случае логика присвоения промежуточных результатов работает неверно.

Эта ошибка освещалась в статье «В ‘osu!’ играй, про ошибки не забывай». Мне стала интересна дальнейшая судьба этого кода, и я полезла искать его в репозитории. Сначала не вышло найти, где этот код был исправлен, так как содержимое всего этого файла было полностью отрефакторено.

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

8xCb60W

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

// If the head wasn’t hit or the hold note was broken,
// cap the max score to Meh.
if ( result > HitResult.Meh
(!holdNote.Head.IsHit || holdNote.HasBroken))
result = HitResult.Meh;

Здесь при прерывании или пропуске «ноты», которую надо зажать, оценка не просто снижается, а вообще сводится к самой низкой. Возможно, разработчики решили кардинально изменить логику. Но не менее вероятно, что исходный код был ошибочным и, если бы разработчики «osu!» использовали PVS-Studio, то анализатор указал бы им на место с такой подозрительной логикой и они могли бы исправить его гораздо раньше.

Как использовать PVS-Studio бесплатно

AbKQtzY

Ну и перейдём к самому интересному. Как же использовать PVS-Studio бесплатно. Есть несколько вариантов. Возможно один из них подойдёт и Вам.

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

  1. Открытые проекты;
  2. Закрытые проекты;
  3. Эксперты безопасности;
  4. Microsoft MVP.

Вторая категория из этого списка может использовать PVS-Studio бесплатно с помощью добавления в проект специальных комментариев и ей могут воспользоваться:

  • Студенты и преподаватели;
  • Индивидуальные разработчики;
  • Открытые бесплатные проекты.

В этом случае разработчику просто будет нужно оставить специальный комментарий для PVS-Studio в своём коде. Для остальных категорий предоставляется бесплатный лицензионный ключ.

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

Подробнее о деталях, как использовать PVS-Studio бесплатно, можно прочитать вот в этой статье из нашего блога.

Читайте также:
Программа производственного контроля питьевой воды что это

Заключение

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

В нашем корпоративном блоге вы можете найти другие наши статьи про проверку игровых проектов, перейдя по тегу #GameDev.

  • vkhanieva
  • 16 ноября 2020, 11:50

Источник: gamin.me

PVS-Studio. Тестируем статический анализатор кода на реальном проекте

В этой статье я покажу тебе, как исполь­зовать ста­тичес­кий ана­лиза­тор кода для отло­ва багов в прог­рамме. Исполь­зовать мы будем пре­дос­тавлен­ный нам на тес­тирова­ние PVS-Studio и на живом про­екте пос­мотрим, на какие ошиб­ки он пожалу­ется и в каких слу­чаях выручит.

Зачем нужен статический анализатор

Сов­ремен­ные при­ложе­ния — это огромные мас­сивы кода и биб­лиотек. Усле­дить за ошиб­ками в них — дело неп­ростое. Мож­но забыть выс­вободить ресур­сы, сде­лать «удач­ную» опе­чат­ку, при которой код собира­ется, но ведет себя неп­равиль­но, допус­тить утеч­ку памяти.

Короче, есть мно­жес­тво ситу­аций, которые спо­соб­ны прев­ратить отладку в изма­тыва­ющее прик­лючение. И если ты ока­зал­ся в одной из них, это вов­се не зна­чит, что ты пло­хой прог­раммист. Прос­то люди могут уста­вать, отвле­кать­ся и допус­кать ошиб­ки.

Для помощи прог­раммис­там при­дума­ли спе­циаль­ные тул­зы — ста­тичес­кие ана­лиза­торы кода, которые помога­ют в раз­работ­ке и выяв­ляют раз­ные ошиб­ки: логичес­кие баги, опе­чат­ки, опас­ные конс­трук­ции, несо­ответс­твия каким‑то стан­дартам и кон­венци­ям и так далее. Ста­тичес­кие ана­лиза­торы при­меня­ются имен­но на эта­пе раз­работ­ки, а не тес­тирова­ния, поэто­му поз­воля­ют пра­вить код на мес­те, что нам­ного про­ще и быс­трее.

Да­вай пос­мотрим, как обра­щать­ся с ана­лиза­тором на при­мере PVS-Studio. Я покажу, какие ошиб­ки будут им ловить­ся, а за чем при­дет­ся сле­дить самос­тоятель­но. PVS-Studio «понима­ет» C/C++, C# и Java, под­держи­вает Windows, Linux и macOS. Но пос­коль­ку показы­вать я буду всё на рабочем про­екте, то сфо­куси­руюсь на C++ и Windows.

Установка и настройка

Итак, кача­ем PVS-Studio с сай­та раз­работ­чика. На момент написа­ния статьи акту­аль­ная вер­сия — 7.19.

Промо

Что­бы получить бес­плат­ную проб­ную лицен­зию на 30 дней, перей­ди по ссыл­ке. В поле «про­мокод» будет встав­лен код xakep, который ком­пания‑раз­работ­чик пре­дос­тавила для читате­лей «Хакера».

Что инте­рес­но, инстал­лятор сра­зу нашел у меня на машине Visual Studio 2022 и IntelliJ IDEA Ultimate 2022 и сра­зу пред­ложил интегри­ровать­ся в них. Не отка­зыва­емся, потому что будет удоб­но исполь­зовать ста­тана­лиза­тор не как отдель­ную тул­зу, а имен­но как пла­гин для IDE.

Инсталятор PVS-Studio детектит установленные IDE

Те­перь откро­ем Visual Studio и прой­дем­ся по самым инте­рес­ным нас­трой­кам.

Настройки PVS-Studio

Об­рати вни­мание на IntermoduladAnalysisCpp, что озна­чает «меж­модуль­ный ана­лиз». Эта нас­трой­ка при­меня­ется толь­ко к про­ектам на C++. Раз­работ­чики уве­ряют, что при вклю­чении этой опции ана­лиза­тор про­изво­дит ана­лиз более эффектив­но. Про­верим! Вот два ска­ниро­вания: без этой опции и вмес­те с ней.

Без межмодульного анализаС включенным межмодульным анализом

Как видишь, ста­ло боль­ше на одну ошиб­ку клас­са Low. Не очень впе­чат­ляет, но галоч­ку луч­ше оста­вить.

Сле­дующая инте­рес­ная опция — No Noise. Она исклю­чает низ­копри­ори­тет­ные пре­дуп­режде­ния, что­бы было про­ще ори­енти­ровать­ся в выдаче ана­лиза­тора.

Ре­комен­дую заг­лянуть и во вклад­ку Detectable Errors — здесь мож­но вклю­чать или вык­лючать обна­руже­ние опре­делен­ных групп оши­бок.

PVS-Studio уме­ет опре­делять потен­циаль­ные уяз­вимос­ти, свя­зан­ные с безопас­ностью кода. Сре­ди нацелен­ных на это наборов пра­вил:

  • CWE — база конс­трук­ций язы­ка, которые содер­жат потен­циаль­ные уяз­вимос­ти;
  • AUTOSAR — набор пра­вил для стан­дарта C++ 14 для встра­иваемых отка­зоус­той­чивых сис­тем;
  • MISRA — пра­вила, вырабо­тан­ные ком­пани­ей MISRA для встра­иваемых сис­тем, где важ­ны безопас­ность и отка­зоус­той­чивость;
  • OWASP — пра­вила для безопас­ной раз­работ­ки веб‑при­ложе­ний;
  • SEI-CERT — пра­вила, соз­данные цен­тром CERT, опять же, для повыше­ния надеж­ности ПО.

Ре­комен­дую вклю­чить все эти под­сказ­ки и обра­щать на них вни­мание при написа­нии кода. Они зна­читель­но уве­личат шанс не про­пус­тить потен­циаль­ный баг.

По­мимо это­го, PVS-Studio опре­деля­ет проб­лемы 64-бит­ного кода, пред­лага­ет опти­миза­ции про­изво­дитель­нос­ти и даже содер­жит нес­коль­ко пра­вил (Custom), которые сде­ланы спе­циаль­но по заяв­кам тру­дящих­ся.

Анализатор на практике: разбираем примеры

Те­перь перей­дем к обзо­ру най­ден­ных при помощи PVS-Studio оши­бок и недоче­тов. Весь код, который будет тут пред­став­лен для при­мера, — реаль­ный, из круп­ного опен­сор­сно­го про­екта, который раз­вива­ется нес­коль­ко лет. «Син­тетичес­ких» оши­бок, искусс­твен­но соз­данных для демонс­тра­ции воз­можнос­тей ста­тана­лиза­тора, я при­водить не буду, ведь это не так инте­рес­но.

За­пус­каем ска­ниро­вание! Пер­вый недочет, най­ден­ный ана­лиза­тором и име­ющий рей­тинг Medium:

V560 A part of conditional expression is always true: threadArg

Ес­ли нажать на номер ошиб­ки, откро­ется сайт раз­работ­чика с пояс­нени­ем (как на рус­ском, так и на англий­ском язы­ках): «Ана­лиза­тор обна­ружил потен­циаль­но воз­можную ошиб­ку внут­ри логичес­кого усло­вия. Часть логичес­кого выраже­ния всег­да истинно и оце­нено как опас­ное». Раз­берем­ся.

Источник: xakep.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru