Формат файла 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 и доступен через главное меню. Работа плагина представлена на скриншоте ниже.
Сканирование может запускаться как в ручном, так и автоматическом режиме.
Для перехода строке кода, в торой находиться ошибка достаточно кликнуть по самой ошибке, при клике по коду ошибки, будет выведена дополнительная информация об этой ошибке и варианты ее устранения..
Анализатор 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
Чтобы не делать это руками, тем более если в вашем проекте много файлов, то вы можете воспользоваться вспомогательной утилитой. Вы должны будете указать ей какой комментарий вставлять и каталог с кодом.
Затем утилита рекурсивно обойдет все файлы в папке и вложенных папках, добавляя в файлы с исходным кодом соответствующие комментарии.
Скачать утилиту (вместе с исходным кодом) можно здесь.
Проект утилиты открывается в Microsoft Visual 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 молчит на таком простейшем примере:
PVS-Studio легко обнаруживает эту ошибку:
В результате исполнения такого кода мы получим неопределённое поведение. На этот счёт в нашем мануале есть даже отдельная заметка.
Но абсолютно такая же по своей сути ошибка может выглядеть и таким образом:
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. Будет там ошибка, ну и ничего страшного -если найдётся, поправим. Но когда несколько дней пытаешься отловить баг в коде, который был написан неделю/месяц/год назад, отношение к ошибкам становится уже не таким легкомысленным. И чем дольше ошибка сохраняется в продукте, тем дороже она стоит, а уж если она достигнет пользователя, то можно заработать не только бессонные ночи дебага, но и репутационные потери.
Статический анализ как раз-таки и позволяет находить ошибки на этом самом начальном этапе разработки, когда программист ещё пишет код. Подход, при котором анализатор запускается один раз в неделю/месяц/год, сводит это преимущество статического анализатора к нулю, ведь многие ошибки уже будут найдены и поправлены долгим и дорогим дебагом и тестированием.
Далее приведу несколько примеров ошибок, которые 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;
.
>
.
>
>
На этот код и его продолжение (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!’ играй, про ошибки не забывай». Мне стала интересна дальнейшая судьба этого кода, и я полезла искать его в репозитории. Сначала не вышло найти, где этот код был исправлен, так как содержимое всего этого файла было полностью отрефакторено.
Потом я нашла вот этот коммит, который разбивал логику этого кода на еще пару файлов. В один из этих файлов и был вынесен код с ошибкой.
Покопавшись в истории уже нового файла, я в итоге нашла коммит который, наконец, исправлял этот код. Причем исправление было капитальным:
// 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 бесплатно
Ну и перейдём к самому интересному. Как же использовать PVS-Studio бесплатно. Есть несколько вариантов. Возможно один из них подойдёт и Вам.
Возможность бесплатно использовать анализатор предоставляются следующим категориям:
- Открытые проекты;
- Закрытые проекты;
- Эксперты безопасности;
- 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.
Теперь откроем Visual 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