Как найти xray на компьютере
Однако, как и во многих проектах, после релиза игры начинаются некоторые проблемы. У каждого игрока свой компьютер или ноутбук, различные комплектующие и их характеристики. После релиза начали выявляться и устраняться различные баги и недоработки, незамеченные до этого. Но некоторые игроки встречаются с проблемой вылета игры – так называемой ошибкой XRay Engine. В данной статье будут приведены способы решения этой проблемы.
Что значит ошибка XRay Engine?
Ошибка встречается не у всех, но достаточно часто у тех, кто скачивает пиратскую версию игры. Сама ошибка относится к ошибкам игрового движка, ведь игру разрабатывали на XRay Engine. В сообществе геймеров ошибку прозвали – Жук несчастья, так как на табличке, оповещающей о данной неисправности, размещается зелёный жук. Ошибка обычно выскакивает после запуска игры. После запуска происходит вылет Зова Припяти и появляется табличка с описанием ошибки. Далее рассмотрены способы решения данной проблемы:
Как убрать ошибку XRay Engine
Вариант 1. Удаление файла user.ltx
Первый способ довольно прост и хорошо работает. Он заключается в удалении конфигурационного файла из документов игры – user.ltx. Чтобы найти данный файл, необходимо пройти по пути: Локальный диск C – Пользователи – Общие – Общие документы – Папка Зова Припяти. Именно в этой папке будет находиться нужный файл, который следует удалить. После этого можно запускать игру:
Вариант 2. Удаление папки Gamedata
Второй вариант направлен на удаление папки gamedata. Данная папка находится в коренной папке с проектом, там, куда была установлена игра. После удаления папки игра должна запуститься:
Вариант 3. Манипуляции с папкой save
Данная папка также находится в коренной папке с установленной игрой. Необходимо удалить следующие элементы, находящиеся в данной папке: папку logs, папку shaders_cache и файл tmp.ltx. Необходимо оставить только папку savedgames и user.ltx. Данные манипуляции также могут помочь, и ошибка должна исчезнуть:
Вариант 4. Покупка игры
Если проблема не исчезает после проделанных манипуляций, следует задуматься о покупке игры. На данный момент вся серия Сталкера стоит совсем недорого в любом игровом магазине. Покупка не только поможет избежать различных ошибок запуска игры, но и поддержит разработчиков. Возможно именно эта покупка поможет в разработке новой части – Сталкер 2:
Вариант 5. Переустановка игры
Ещё один способ, справляющийся с большинством известных проблем – переустановка игры. Это рекомендуют делать в различных ситуациях, в том числе и при ошибке XRay Engine. Переустанавливать лучше игру, скачанную из другого источника, так как предыдущая могла быть неправильно пропатчена, что приводило к данной проблеме. Лучше всего найти репак последней версии и с хорошими отзывами:
Выводы
Для устранения ошибки не нужно скачивать дополнительные программы, переустанавливать операционную систему или копаться в различных незнакомых папках. Все манипуляции довольно просты и доступны к выполнению большинства пользователей.
Дабы узнать о способе решения проблемы, необходимо подробнее разобраться в ее первопричине. Начнем с того, что XRay – это игровой движок, который используется во всех частях «Сталкера».
Создан он был специально для этой игры, причем произошло это еще в далеком 2001 году. Так как сам проект STALKER оказался просто-таки былинным «долгостроем», свет он увидел только через пять лет. Сперва разработчики предполагали использовать его исключительно с DirectX 8, но уже к выходу первой части трилогии в него добавили поддержку DirectX 9. В 2008 году, когда был анонсирован выход многострадального «Чистого неба», туда же добавили 10-ю версию.
Наконец, «Зов Припяти» получил также DirectX 11. Впрочем, учитывая некоторые «шероховатости» в самом коде игры, полностью раскрыть весь потенциал 11-й версии движок оказался не в состоянии.
В чем выражается проявление ошибки?
Этот момент ни с чем не спутать. Игра внезапно останавливается, после чего происходит вылет на рабочий стол. Так как в диалоговом окне с описанием кода ошибки изображен большой жук, то XRay Engine на фанатских форумах нередко называют «зеленой бедой» и «жуком несчастья».
Впрочем, довольно лирики. С чем связано появление «жука»?
Причины появления
Увы, но однозначного ответа на столь животрепещущий вопрос попросту нет. Разработчики из GSC не особенно комментировали причины даже в тот период, когда компания еще существовала, а сейчас надеяться на подробные ответы и вовсе бессмысленно.
Методом «проб и ошибок» было выяснено, что чаще всего «летит» игра на компьютерах тех пользователей, у кого не установлены свежие драйвера на видеокарту. Так что если вы не знаете, какая конкретно версия этого ПО установлена на вашей машине, самое время заняться его обновлением.
Обновляем саму игру
Если вы были свидетелем появления «Чистого неба», то прекрасно помните все те «лестные» эпитеты, которыми игроки награждали разработчиков. И было за что! Играть и в самом деле было совершенно невозможно, причем ошибка XRay Engine была еще «цветочками»!
Чего стоят только бессмертные снайперы и полностью пустая «Темная долина»! Нормально играть получилось только с дополнением 1.5.04, причем все сохранения, которые были сделаны на предыдущих версиях, не работали. Словом, если у вас есть интернет, не поленитесь и зайдите на сайт разработчика. Все существующие патчи на все игры серии там есть, так что их нужно только скачать и установить. В этом случае XRay Engine ошибка в «Сталкере» наверняка будет появляться куда реже.
В далеком 2006 году увидела свет лучшая игра всех времён и народов – STALKER.
Эта игра разрабатывалась на протяжении шести лет, и многие геймеры уже не верили в её выход. Но в 2006 году – всё же свершилось. Сталкер превзошел все ожидания, и многие фанаты по нескольку раз на одном дыхании проходили «Тень Чернобыля».
В 2008 году вышла в свет очередная часть этой увлекательной игры – «Чистое небо», а уже через год появилась – «Зов Припяти».
Именно в этой части Сталкера у игроков наиболее часто стала появляться одна проблема – «Ошибка Xray Engine 1.6», и в данном обзоре мы постараемся рассказать пользователям, как бороться с этой проблемой.
Вариант 1. Удаление файла user.ltx
Первый способ довольно прост и хорошо работает. Он заключается в удалении конфигурационного файла из документов игры – user.ltx. Чтобы найти данный файл, необходимо пройти по пути: Локальный диск C – Пользователи – Общие – Общие документы – Папка Зова Припяти. Именно в этой папке будет находиться нужный файл, который следует удалить. После этого можно запускать игру:
Вариант 2. Удаление папки Gamedata
Второй вариант направлен на удаление папки gamedata. Данная папка находится в коренной папке с проектом, там, куда была установлена игра. После удаления папки игра должна запуститься:
Вариант 3. Манипуляции с папкой save
Данная папка также находится в коренной папке с установленной игрой. Необходимо удалить следующие элементы, находящиеся в данной папке: папку logs, папку shaders_cache и файл tmp.ltx. Необходимо оставить только папку savedgames и user.ltx. Данные манипуляции также могут помочь, и ошибка должна исчезнуть:
Вариант 4. Покупка игры
Если проблема не исчезает после проделанных манипуляций, следует задуматься о покупке игры. На данный момент вся серия Сталкера стоит совсем недорого в любом игровом магазине. Покупка не только поможет избежать различных ошибок запуска игры, но и поддержит разработчиков. Возможно именно эта покупка поможет в разработке новой части – Сталкер 2:
Вариант 5. Переустановка игры
Ещё один способ, справляющийся с большинством известных проблем – переустановка игры. Это рекомендуют делать в различных ситуациях, в том числе и при ошибке XRay Engine. Переустанавливать лучше игру, скачанную из другого источника, так как предыдущая могла быть неправильно пропатчена, что приводило к данной проблеме. Лучше всего найти репак последней версии и с хорошими отзывами:
Другие возможные причины
Если вам не повезло, и ни одно из решений проблемы не помогло, то вы сможете найти это решение в изменении файла подкачки. С багом боролись большое количество времени, но именно это решение проблемы нашли не так уж и давно.
Проблема заключается в том, что у игроков поставлен маленький файл подкачки, но что это такое? Файл подкачки создаёт так называемую виртуальную память с оперативной памятью, благодаря чему ваш компьютер работает немного быстрее. Для решения бага через файл подкачки вам нужно изменить его, увеличив объём оперативной памяти в два раза. Как же это сделать?
Для начала вы должны нажать на иконку «Мой компьютер» правой кнопкой мышки, после чего выбрав его свойства. В свойствах вы сможете найти вкладку с виртуальной памятью, в которой, собственно, у вас и получится её увеличить. Вы значительно уменьшите риски вылета после этих действий, скорее всего, у вас даже получится искоренить эту проблему из своего компьютера навсегда.
Что такое xrengine.exe?
Xrengine.exe безопасный или это вирус или вредоносная программа?
Для подтверждения откройте Диспетчер задач, перейдите в «Просмотр» -> «Выбрать столбцы» и выберите «Имя пути к изображению», чтобы добавить столбец местоположения в диспетчер задач. Если вы найдете здесь подозрительный каталог, возможно, будет хорошей идеей продолжить изучение этого процесса.
Если статус процесса «Подтвержденный подписчик» указан как «Невозможно проверить», вам следует взглянуть на процесс. Не все хорошие процессы Windows имеют ярлык проверенной подписи, но ни один из них не имеет плохих.
Наиболее важные факты о xrengine.exe:
Если у вас возникли какие-либо трудности с этим исполняемым файлом, перед удалением xrengine.exe вы должны определить, заслуживает ли он доверия. Для этого найдите этот процесс в диспетчере задач.
Могу ли я удалить или удалить xrengine.exe?
Не следует удалять безопасный исполняемый файл без уважительной причины, так как это может повлиять на производительность любых связанных программ, использующих этот файл. Не забывайте регулярно обновлять программное обеспечение и программы, чтобы избежать будущих проблем, вызванных поврежденными файлами. Что касается проблем с функциональностью программного обеспечения, проверяйте обновления драйверов и программного обеспечения чаще, чтобы избежать или вообще не возникало таких проблем.
Наиболее распространенные ошибки xrengine.exe, которые могут возникнуть:
3 простых шага по исправлению ошибок XRENGINE.EXE
Выполните следующие шаги:
3- Настройка Windows для исправления критических ошибок xrengine.exe:
Вывод
Даже сегодня все части полюбившейся игры Stalker не перестают радовать восторженных фанатов этой серии. Stalker буквально явился некой революцией в игровом мире, а его реалистичная графика поистине завораживала игроков того времени.
Всем привет, вышла новая версия мода Xray для Minecraft для Майнкрафт 1.17.1/1.16.5, с помощью этого так называемого читерского мода вы сможете просматривать сквозь текстуры и выбирать нужные, к примеру полезные ресурсы (алмазы, золотые руды и тд), так же скачать xray можно всех версий.
Мод активно используют на серверах. Можно смело назвать его читом, так как время на добычу руд значительно сократится. Каждый игрок на сервере хочет быть богатым, всё как и в жизни, поэтому он пытается использовать различные методы быстрого обогащения и поэтому мы назовём этот способ нечестным. Итак, для того чтобы быстро обогатиться в нашей популярной игре, следует скачать и установить этот чит-модификацию под названием x-Ray.
Для 1.17.1 (fabric) xray-mod-v73-1_17_1.jar [ 294.74 Kb 19262 16 июля 2021]
Для 1.17 (fabric) xraymod-1_0_5-1_17.jar [ 36.84 Kb 3979 14 июня 2021]
Для 1.16.5/1.16.4 (forge) forgexray-1_0_5-1_16_x.jar [ 33.67 Kb 27538 14 июня 2021]
Для 1.16.5/1.16.4 (fabric) xray-1_0_5.jar [ 37.44 Kb 4787 14 июня 2021]
Для 1.16.3 (forge) xray-1_16_3-2_5_0.jar [ 128.69 Kb 7409 18 сентября 2020]
Для 1.16.2 (forge) xray-mod-v71-1_16_2.jar [ 277.14 Kb 5121 14 августа 2020]
Для 1.16.1 (forge) xray-mod-v70-1_16_1.jar [ 277.08 Kb 7025 09 июля 2020]
Для 1.15.2 (Без forge)
Для 1.14.4 (forge) xray-mod-v67-1_14_4.jar [ 270.48 Kb 32951 29 июля 2019]
Для 1.14.3 (forge) xray-mod-v66-1_14_3.jar [ 282.3 Kb 1347 13 июля 2019]
Для 1.14.2 (forge) xray-mod-v65-1_14_2.jar [ 255.38 Kb 1373 13 июля 2019]
Для 1.13.2 (forge) xray-mod-v63-1_13_2.jar [ 254.9 Kb 828 13 июля 2019]
Для 1.12.2/1.12.1/1.12 (forge) xray-1.12-1.3.3.jar [ 91.36 Kb 31747 19 сентября 2017]
Для 1.11.2 (forge) fgtxray_1.11.2_1.1.0.1.jar [ 41.8 Kb 2542 20 июня 2017]
Для 1.10.2 (forge) fgtxray_1.10.2_1.1.0.1.jar [ 41.42 Kb 431 20 июня 2017]
Для 1.9.4 (forge) fgtxray_1.9.4_1.0.9.jar [ 41.42 Kb 188 20 июня 2017]
Для 1.8.8 (forge) XRay-Mod-All-Versions.jar [ 253.89 Kb 658 14 января 2016]
Для 1.7.10 (forge) The-Simple-Xray-Mod-1.7.10.zip [ 51.26 Kb 1550 28 июня 2014]
Для 1.7.9 (forge) The-Simple-Xray-Mod-1.7.9.zip [ 50.67 Kb 829 28 июня 2014]
X-Ray Engine — игровой движок, который используется в играх серии S.T.A.L.K.E.R. 16 сентября 2014 года его исходный код был выложен в открытый доступ, и с тех пор его развитием занимаются фанаты. Большой размер проекта, огромное количество багов в играх — всё это располагает к отличной демонстрации возможностей статического анализатора кода PVS-Studio.
Вступление
X-Ray был создан украинской компанией GSC GameWorld для игры S.T.A.L.K.E.R.: Тень Чернобыля. Движок включает рендер с поддержкой DirectX 8.1/9.0c/10/10.1/11, физический и звуковой движки, мультиплеер и систему искусственного интеллекта A-Life. Впоследствии компания создавала движок версии 2.0 для своей новой игры, но разработка была прекращена и исходные коды утекли в сеть.
Проект вместе со всеми его зависимостями легко собирается в Visual Studio 2015. Для проверки использовался исходный код движка версии 1.6 из репозитория на GitHub и статический анализатор кода PVS-Studio 6.04, загрузить который можно по ссылке.
Copy-paste
Для начала рассмотрим ошибки, связанные с копированием кода. Сценарий их возникновения в разных случаях обычно похож: скопировали код, поменяли часть переменных, а несколько — забыли. Такие ошибки могут быстро распространяться по кодовой базе, и без статического анализатора их очень легко пропустить.
Предупреждение PVS-Studio: V533 It is likely that a wrong variable is being incremented inside the 'for' operator. Consider reviewing 'i'. mxqmetric.cpp 76
Анализатор обнаружил, что во вложенном цикле for инкрементируется переменная i, а проверяется переменная j, что приводит к бесконечному циклу. Скорее всего, при копировании её просто забыли поменять.
-
The conditional expressions of the 'if' operators situated alongside each other are identical. Check lines: 445, 447. base_monster_startup.cpp 447 The conditional expressions of the 'if' operators situated alongside each other are identical. Check lines: 447, 449. base_monster_startup.cpp 449
Предупреждение PVS-Studio: V517 The use of 'if (A) <. >else if (A) <. >' pattern was detected. There is a probability of logical error presence. Check lines: 1502, 1505. gstats.c 1502
Как и в предыдущем примере, здесь используются два одинаковых условия (strncmp(buff,"\\getpidr\\",9) == 0). Сложно сказать наверняка, является ли это ошибкой или просто недостижимым кодом, но на это точно стоит обратить внимание. Возможно, что здесь должны быть блоки с getpidr/setpidr по аналогии с getpdr/setpdr.
Предупреждение PVS-Studio: V524 It is odd that the body of 'width' function is fully equivalent to the body of 'height' function. tpixel.h 1090
Методы height() и width() имеют одинаковое тело. Учитывая, что вычисляются размеры граней куба, возможно, ошибки здесь нет. Но лучше переписать метод width() следующим образом:
Неправильное использование C++
C++ — замечательный язык, который предоставляет программисту много возможностей… отстрелить себе ногу особо жестоким образом. Неопределённое поведение, утечки памяти и, конечно же, опечатки — об ошибках такого рода пойдёт речь в текущем разделе.
Предупреждение PVS-Studio: V591 Non-void function should return a value. _matrix33.h 435
В конце метода пропущен return *this. По стандарту подобный код приведёт к неопределённому поведению. Так как возвращаемое значение является ссылкой, это, скорее всего, приведёт к падению программы при попытке обратиться к возвращаемому значению.
Предупреждение PVS-Studio: V575 The null pointer is passed into 'fclose' function. Inspect the first argument. ogg_enc.cpp 47
Довольно интересный пример. Анализатор обнаружил, что аргумент в вызове fclose равен nullptr, что делает вызов функции бессмысленным. Можно предположить, что должны были закрыть поток in.
-
A part of conditional expression is always true: 0x000000FF. nvi_image.cpp 170 A part of conditional expression is always true: 0x000000FF. nvi_image.cpp 171 A part of conditional expression is always true: 0x000000FF. nvi_image.cpp 172 A part of conditional expression is always true: 0x000000FF. nvi_image.cpp 173
Ещё один пример странного кода:
Предупреждение PVS-Studio: V603 The object was created but it is not being used. If you wish to call constructor, 'this->VertexCache::VertexCache(. )' should be used. vertexcache.cpp 6
Вместо вызова одного конструктора из другого для инициализации экземпляра будет создан и тут же уничтожен новый объект типа VertexCache. В результате члены создаваемого объекта останутся непроинициализированными.
Предупреждение PVS-Studio: V530 The return value of function 'empty' is required to be utilized. actor_network.cpp 657
Анализатор предупреждает, что возвращаемое функцией значение не используется. Похоже, что программист перепутал методы empty() и clear(): empty() не очищает массив, а проверяет, является ли он пустым.
Такие ошибки нередко встречаются в различных проектах. Проблема в том, что имя empty() не очевидно: некоторые воспринимают его как действие — удаление. Для того, чтобы подобной неоднозначности не возникало лучше добавлять глаголы has, is к началу метода: действительно, isEmpty() с clear() сложно перепутать.
V530 The return value of function 'unique' is required to be utilized. uidragdroplistex.cpp 780
Предупреждение PVS-Studio: V575 The 'memset' function processes '0' elements. Inspect the third argument. xrdebug.cpp 104
При вызове memset аргументы перепутали местами и в итоге буфер не обнуляется, как изначально задумывалось. Подобная ошибка может жить в проекте очень долго, так как её очень трудно обнаружить. В таких местах на выручку программисту приходит статический анализатор.
Корректное использование memset:
Следующая ошибка связана с неправильно составленным логическим выражением.
Предупреждение PVS-Studio: V547 Expression is always true. Probably the '&&' operator should be used here. configs_dumper.cpp 262
Выражения вида 'x != a || x != b' всегда являются истинным. Вероятнее всего вместо оператора || подразумевался оператор &&.
Подробнее об ошибках в логических выражениях можно прочитать в статье "Логические выражения в C/C++. Как ошибаются профессионалы".
Предупреждение PVS-Studio: V674 The '0.5f' literal of the 'float' type is compared to a value of the 'int' type. boneprotections.cpp 54
Анализатор обнаружил сравнение целочисленного значения с вещественной константой. Возможно, что здесь по аналогии должна была использоваться функция atof, а не atoi, в другом случае стоит переписать это сравнение, чтобы оно не выглядело подозрительно. Однако сказать наверняка, является ли этот пример ошибочным или нет, может только разработчик, писавший его.
Предупреждение PVS-Studio: V595 The 'object' pointer was utilized before it was verified against nullptr. Check lines: 42, 47. level_bullet_manager_firetrace.cpp 42
Проверка указателя object на равенство nullptr идёт после того, как разыменовали object->ID(). В случае, когда object равен nullptr, это приведёт к падению программы.
Предупреждение PVS-Studio: V718 The 'CoInitializeEx' function should not be called from 'DllMain' function. xrcore.cpp 205
В теле DllMain нельзя использовать часть WinAPI функций, включая CoInitializeEx. Убедиться в этом можно, прочитав документацию на MSDN. Нельзя дать какой-то однозначный совет, как стоит переписать эту функцию, но стоит понимать, что такая ситуация опасна, так как она может привести к взаимной блокировке потоков или аварийному завершению.
Ошибки в приоритетах
Предупреждение PVS-Studio: V532 Consider inspecting the statement of '*pointer++' pattern. Probably meant: '(*pointer)++'. lwio.c 316
Ошибка связана с использованием инкремента. Для наглядности перепишем данное выражение, расставив скобки:
То есть произойдёт сдвиг не содержимого по адресу bp, а самого указателя, что в данном контексте бессмысленно. Ниже по коду есть фрагменты вида *bp += N, из-за чего я и сделал вывод, что это ошибка.
Избежать подобной ошибки помогла бы расстановка скобок, что сделало бы порядок вычислений более понятным. Также неплохой методикой является использование const для аргументов, которые не должны меняться.
- V532 Consider inspecting the statement of '*pointer++' pattern. Probably meant: '(*pointer)++'. lwio.c 354
- V532 Consider inspecting the statement of '*pointer++' pattern. Probably meant: '(*pointer)++'. lwob.c 80
Предупреждение PVS-Studio: V563 It is possible that this 'else' branch must apply to the previous 'if' statement. hit_memory_manager.cpp 368
В этом фрагменте ветвь else относится ко второму if из-за своей право-ассоциативности, что не совпадает с форматированием кода. К счастью, данный случай не отражается на работе программы, тем не менее, он может усложнить процесс отладки и тестирования.
Рекомендация проста — в более-менее сложных ветвлениях расставляйте фигурные скобки.
Предупреждение PVS-Studio: V502 Perhaps the '?:' operator works in a different way than it was expected. The '?:' operator has a lower priority than the '*' operator. hudsound.cpp 108
У тернарного условного оператора приоритет ниже, чем у умножения, поэтому порядок операций будет следующим:
Очевидно, что правильный код должен выглядеть так:
Выражения, содержащие тернарный оператор, несколько if-else ветвей или операции И/ИЛИ, — это те случаи, когда лучше поставить лишние скобки.
- V502 Perhaps the '?:' operator works in a different way than it was expected. The '?:' operator has a lower priority than the '+' operator. uihudstateswnd.cpp 487
- V502 Perhaps the '?:' operator works in a different way than it was expected. The '?:' operator has a lower priority than the '+' operator. uicellcustomitems.cpp 106
Лишние сравнения
Предупреждение PVS-Studio: V571 Recurring check. The 'if (m_pPhysicsShell)' condition was already verified in line 32. destroyablephysicsobject.cpp 33
В данном примере дважды проверяется m_pPhysicsShell. Скорее всего, вторая проверка лишняя.
Предупреждение PVS-Studio: V571 Recurring check. The 'm_wVersion > 89' condition was already verified in line 987. xrserver_objects_alife_items.cpp 989
Очень странный код. То ли здесь забыли выражение после if (m_wVersion > 89), то ли целую серию else-if. Данный метод требует более подробного рассмотрения разработчиком проекта.
Ошибки в типах данных
Предупреждение PVS-Studio: V636 The '1 / 100' expression was implicitly cast from 'int' type to 'float' type. Consider utilizing an explicit type cast to avoid the loss of a fractional part. An example: double A = (double)(X) / Y;. gl_rendertarget.cpp 245
Значение выражения 1/100 равно 0, так как выполняется операция целочисленного деления. Чтобы получить значение 0.01f, нужно использовать вещественный литерал, переписав выражение: 1/100.0f. Хотя возможно, что данное поведение было предусмотрено автором, и ошибки здесь нет.
Предупреждение PVS-Studio: V579 The strconcat function receives the pointer and its size as arguments. It is possibly a mistake. Inspect the first argument. space_restriction.cpp 201
Функция strconcat, в качестве первого параметра принимает длину буфера. Буфер S объявлен, как LPSTR, то есть как указатель на строку. sizeof(S) будет равен размеру указателя в байтах, то есть sizeof(char *), а не количеству символов в строке. Для вычисления длины следует использовать strlen(S).
Предупреждение PVS-Studio: V712 Be advised that compiler may delete this cycle or make it infinity. Use volatile variable(s) or synchronization primitives to avoid this. xrcdb.cpp 100
Компилятор может убрать проверку S_INIT == status в качестве оптимизации, так как переменная status не модифицируется в цикле. Для того, чтобы избежать подобного поведения, нужно использовать volatile переменные или типы синхронизации данных между потоками.
- V712 Be advised that compiler may delete this cycle or make it infinity. Use volatile variable(s) or synchronization primitives to avoid this. levelcompilerloggerwindow.cpp 23
- V712 Be advised that compiler may delete this cycle or make it infinity. Use volatile variable(s) or synchronization primitives to avoid this. levelcompilerloggerwindow.cpp 232
Предупреждение PVS-Studio: V547 Expression 'squad->get_index(this) == u32(- 1)' is always false. The value range of unsigned char type: [0, 255]. ai_rat.cpp 480
Та же диагностика срабатывает и для избыточных сравнений беззнаковых переменных:
Предупреждение PVS-Studio: V547 Expression 'm_tActionCondition.m_tLifeTime >= 0' is always true. Unsigned type value is always >= 0. script_entity_action_inline.h 115
Переменная m_tLifeTime является беззнаковой, соответственно она всегда больше или равна нулю. Является ли это лишней проверкой или же здесь скрыта ошибка в логике, судить разработчику.
V547 Expression 'm_tActionCondition.m_tLifeTime < 0' is always false. Unsigned type value is never < 0. script_entity_action_inline.h 143
Предупреждение PVS-Studio: V746 Type slicing. An exception should be caught by reference rather than by value. object_item_script.cpp 39
Функция std::exception::what() является виртуальной и может быть переопределена в наследуемых классах. В данном примере исключение ловится по значению, следовательно, экземпляр класса будет скопирован и вся информация о полиморфном типе будет потеряна. Обращаться к what() в таком случае бессмысленно. Исключение стоит перехватывать по ссылке:
Разное
Предупреждение PVS-Studio: V570 The 'value[0]' variable is assigned to itself. compiler_cover.cpp 260
Переменная value[0] присваивается сама себе. Зачем это делать — непонятно. Возможно, ей должно было быть присвоено другое значение.
Предупреждение PVS-Studio: V501 There are identical sub-expressions '(mstate_rl & mcLanding)' to the left and to the right of the '||' operator. actoranimation.cpp 290
Вероятнее всего здесь просто лишняя проверка mstate_rl & mcLanding, но часто подобные предупреждения сигнализируют об ошибке в логике и нерассмотренных значениях enum.
- V501 There are identical sub-expressions 'HudItemData()' to the left and to the right of the '&&' operator. huditem.cpp 338
- V501 There are identical sub-expressions 'list_idx == e_outfit' to the left and to the right of the '||' operator. uimptradewnd_misc.cpp 392
- V501 There are identical sub-expressions '(D3DFMT_UNKNOWN == fTarget)' to the left and to the right of the '||' operator. hw.cpp 312
Предупреждение PVS-Studio: V519 The variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 57, 58. relation_registry.cpp 58
Анализатор обнаружил, что одной переменной присваиваются подряд два значения. В данном случае похоже, что это просто мёртвый код и его стоит удалить.
Предупреждение PVS-Studio: V576 Incorrect format. A different number of actual arguments is expected while calling 'printf' function. Expected: 2. Present: 1. entry_point.cpp 41
В функцию printf передаётся недостаточное количество аргументов: формат '%s' указывает на то, что должен быть передан указатель на строку. Такая ситуация может привести к ошибке доступа к памяти и экстренному завершению программы.
Заключение
Проверка исходного кода X-Ray Engine выявила большое количество как лишнего или подозрительного кода, так и однозначно ошибочных и опасных моментов. Стоит отметить, что статический анализатор отлично помогает выявлять ошибки на раннем этапе разработки, что значительно облегчает жизнь программисту и освобождает время на создание новых версий приложения.
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Pavel Belikov. Anomalies in X-Ray Engine.
Читайте также: