• Ошибка с директивой #line в компиляторе Visual C++

      image1.png

      Директива #line добавляется препроцессором и затем может быть использована для понимания, к какому файлу и строке относится тот или иной фрагмент кода в препроцессированном файле. Директива #line указывает инструментам, работающим с кодом, изменить внутренний хранимый номер строки и имя файла компилятора на заданный номер строки. Следующие строки уже будут отсчитывать относительно заданной позиции. Явное препроцессирование, в основном, используется для отладки или различными генераторами. В любом случае, ошибка в таком функционале может приводить к разным негативным последствиям. Одна из таких проблем возникла у пользователя PVS-Studio в Visual Studio 2019.
      Читать дальше →
    • Как забраться на дерево

        Picture 2

        Точнее, как с него спуститься. Но обо всем по порядку. Эта статья немного выбьется из привычного формата статей от PVS-Studio. Мы часто пишем о проверке других проектов, но почти никогда не приоткрываем дверь нашей внутренней кухни. Пришло время это исправить и рассказать о том, как анализатор устроен изнутри. Точнее, о наиболее важной из его частей – синтаксическом дереве. Речь в статье пойдет о той части PVS-Studio, которая относится к языкам C и C++.
        Читать дальше →
      • Обзор возможностей PVS-Studio версии 7.07

          Picture 30

          Цель этой статьи – обзорная демонстрация возможностей статического анализатора PVS-Studio. Самый простой и наглядный способ это сделать – показать работу инструмента на примерах. Будет показана проверка проекта при помощи плагина для Visual Studio, запуск анализатора в операционной системе Linux, импорт результатов анализа в SonarQube.
          Читать дальше →
        • И снова про embedded: ищем баги в проекте Embox

            Рисунок 2

            Embox – это кросс-платформенная мультизадачная операционная система реального времени для встраиваемых систем. Она рассчитана на работу в условиях невысоких вычислительных ресурсов и позволяет запускать Linux-приложения на микроконтроллерах без использования самого Linux. Конечно, как и любые другие приложения, Embox баги тоже не обошли стороной. Данная статья посвящена разбору ошибок, найденных в коде проекта Embox.
            Читать дальше →
          • Начало бета-тестирования плагина для Rider и PVS-Studio C# для Linux / macOS

              Picture 1

              В связи с чередой различных событий начало бета-тестирования плагина для Rider и C# анализатора для Linux / macOS немного задержалось. Однако мы рады сообщить, что этот день настал – сегодня мы запускаем бета-тест.
              Читать дальше →
            • Повторная проверка Newton Game Dynamics статическим анализатором PVS-Studio

                Рисунок 1

                Недавно на просторах интернета мной был обнаружен физический движок Newton Game Dynamics. Зная, что в таких проектах обычно большой объём сложного кода, я подумал, что будет интересно проверить его статическим анализатором PVS-Studio. Мой энтузиазм ещё больше подстегнуло то, что мой коллега Андрей Карпов уже проверял данный проект в 2014 году, а значит, это ещё и хорошая возможность продемонстрировать развитие нашего анализатора за последние шесть лет. Также стоит отметить, что на момент написания статьи последний релиз Newton Game Dynamics датирован 27 февраля 2020 года, то есть данный проект тоже активно развивается последние 6 лет. Таким образом, надеюсь, что помимо нашей команды, данная статья будет интересна и разработчикам движка, которые смогут избавиться от некоторых багов и исправить свой код.
                Читать дальше →
              • Проверка компилятора GCC 10 с помощью PVS-Studio

                  PVS-Studio vs GCC 10

                  Компилятор GCC написан с обильным использованием макросов. Очередная проверка кода GCC с помощью PVS-Studio вновь подтверждает мнение нашей команды, что макросы – это плохо. В таком коде тяжело разбираться не только статическому анализатору, но и программисту. Конечно, разработчики GCC уже привыкли к проекту и хорошо разбираются в нём. Но со стороны очень сложно что-то понять. Собственно, из-за макросов и не удалось полноценно выполнить проверку кода. Тем не менее, анализатор PVS-Studio, как всегда, показал, что может находить ошибки даже в компиляторах.
                  Читать дальше →
                • DeepCode: взгляд со стороны

                    Picture 1

                    Не так давно DeepCode, статический анализатор, основанный на машинном обучении, стал поддерживать проверку C и C++ проектов. И теперь мы можем на практике взглянуть, чем отличаются результаты классического статического анализа и статического анализа, основанного на машинном обучении.
                    Читать дальше →
                  • Как странный код скрывает ошибки? Анализ TensorFlow.NET

                      TensorFlow.NET и PVS-Studio

                      Статический анализ – крайне полезный инструмент для любого разработчика, так как помогает вовремя отыскать не только ошибки, но и просто подозрительные и странные фрагменты кода, которые могут вызвать недоумение у программистов, которым пришлось бы работать с ним в будущем. Эту мысль продемонстрирует анализ открытого C# проекта TensorFlow.NET, разрабатываемый для работы с популярной библиотекой машинного обучения TensorFlow.
                      Читать дальше →
                    • Поиск багов как образ жизни: обзор №3


                        На фоне введения режима самоизоляции возросла популярность некоторых программ и сервисов. А следовательно, большее количество людей столкнётся с багами, которые ранее «не замечали» разработчики. В этот обзор вошли сервисы, которые так популярны сейчас: доставка еды и продуктов Delivery Club, Яндекс.Еда, iGooods и Автосуши. И другой софт, которым мне понадобилось воспользоваться, находясь длительное время дома: Сбербанк, Puzzle Movies и Налоги ФЛ.
                        Читать дальше →
                      • Начало коллекционирования ошибок в функциях копирования

                          memcpy

                          Уже несколько раз замечал, что программисты допускают ошибки в простых функциях копирования данных. Эта тема потребует в будущем ещё много времени для изучения и подбора материала, чтобы написать основательную статью. Но захотелось поделиться парой примеров, недавно замеченных мною.
                          Читать дальше →
                        • Глубина кроличьей норы или собеседование по C++ в компании PVS-Studio

                            Собеседование по C++ в компании PVS-Studio

                            Авторы: Андрей Карпов, khandeliants Филипп Хандельянц.

                            Хочется поделиться интересной ситуацией, когда вопрос, используемый нами на собеседовании, оказался сложнее, чем задумывал его автор. С языком C++ и компиляторами надо всегда быть начеку. Не заскучаешь.
                            Читать дальше →
                          • Исследуем качество кода операционной системы Zephyr

                              PVS-Studio и Zephyr

                              Недавно мы рассказывали, что анализатор кода PVS-Studio начал интегрироваться с PlatformIO. Естественно, при этом команда разработчиков PVS-Studio общалась с командой PlatformIO и те предложили ради интереса проверить код операционной системы реального времени Zephyr. Почему бы и нет, подумали мы, и вот перед вами статья о таком исследовании.
                              Читать дальше →
                              • +11
                              • 2,2k
                              • 2
                            • OpenToonz: снаружи и внутри

                                image1.png

                                Прошло уже почти четыре года с тех пор, как PVS-Studio поверял исходный код OpenToonz. Этот проект является очень мощным инструментом для создания двухмерной анимации. За время с последней проверки с его помощью были созданы такие мультипликационные произведения, как Мэри и Ведьмин цветок, Бэтмэн-Нинзя, Промаре и другие. Раз большие студии продолжают пользоваться Toonz, то почему бы не проверить качество исходного кода еще раз?
                                Читать дальше →
                              • Скроллбар, который не смог


                                  Недавно вышла новая версия Windows Terminal. Всё бы ничего, но работоспособность её скроллбара оставляла желать лучшего. Поэтому настало время немного потыкать в него палкой и сыграть на бубне.
                                  Читать дальше →
                                  • +18
                                  • 6,2k
                                  • 3
                                • Beta-тест C# анализатора PVS-Studio на Linux и macOS

                                    Picture 1

                                    Всё больше пользователей C# анализатора PVS-Studio интересуются возможностью его использования для проверки C# кода на Linux и macOS. И сегодня у нас хорошие новости.
                                    Читать дальше →
                                  • Интеграция PVS-Studio в PlatformIO

                                      Picture 5

                                      Недавно в среде разработки встраиваемых систем PlatformIO появилась поддержка PVS-Studio. В этой статье вы узнаете, как проверить свой код статическим анализатором на примере открытого проекта.
                                      Читать дальше →
                                    • Перевод на английский язык в сфере IT на примере PVS-Studio

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

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

                                        Читать дальше →
                                      • О масочных регистрах

                                        • Перевод
                                        В наборе команд AVX-512 были представлены восемь так называемых масочных регистров [1] – с k0 [2] по k7. Они пригодны для использования с большинством операций АЛУ и позволяют выполнять операции по маске над элементами векторов с обнулением или слиянием данных в регистре-приёмнике [3], тем самым ускоряя работу кода, что в наборе команд AVX2 и более ранних версиях потребовало бы дополнительных операций слияния.

                                        Если написанного выше недостаточно, чтобы сделать из вас последователя культа масочных регистров, процитирую отрывок из статьи на Википедии, который, я надеюсь, поможет вам окончательно во всём разобраться:
                                        Большинство команд AVX-512 могут использовать операнд-маску, соответствующий одному из 8 масочных регистров (k0–k7). Если масочный регистр используется в качестве маски операции, регистр k0 ведёт себя иначе, чем остальные масочные регистры: в этом случае он выполняет роль жёстко закодированной константы, указывающей, что с данной операцией маска не применяется. Однако в арифметических и логических операциях и при записи значения в масочные регистры k0 ведёт себя как обычный рабочий регистр. В большинстве команд масочные регистры используются в качестве маски, определяющей, какие элементы должны записываться в выходной регистр. Поведение операнда-маски зависит от флага: если он выставлен, все невыбранные элементы будут обнулены (режим «обнуления», zero), если нет – все невыбранные элементы сохраняют прежнее состояние (режим «слияния», merge). Режим слияния даёт тот же эффект, что команды слияния (blend instructions).

                                        В общем масочные регистры [4] – важное нововведение, но о них редко вспоминают в отличие, скажем, от регистров общего назначения (eax, rsi и прочих) или SIMD-регистров (xmm0, ymm5 и т.д.). В презентациях Intel, где приводятся размеры ресурсов микроархитектуры, масочные регистры не упоминаются:

                                        image
                                        Читать дальше →
                                      • Ноль, один, два, Фредди заберёт тебя

                                          Рисунок 1

                                          Перед вами продолжение серии статей, которую можно озаглавить «ужасы для программистов». В этот раз речь пойдёт о типовом паттерне опечаток, связанном с использованием чисел 0, 1, 2. Неважно, пишете вы на C, C++, C# или Java. Если вы используете константы 0, 1, 2, или если эти числа содержатся в именах переменных, то, скорее всего, Фредди заглянет к вам ночью в гости. Читайте и не говорите потом, что вас не предупреждали.
                                          Читать дальше →

                                        Самое читаемое