Для удобства дефектные шашки в Bug Finder классифицируются по различным группам.
В определенных проектах можно выбрать фокус только на определенных группах дефектов. Укажите имя группы для опции Find defects (-checkers)
.
При рассмотрении результатов можно просмотреть все результаты определенной группы вместе. Отфильтровывайте другие результаты во время проверки. См. раздел «Фильтрация и группирование результатов» в интерфейсе пользователя Polyspace Desktop.
В этом разделе представлен обзор различных групп.
Эти дефекты связаны с обработкой исключений C++. Дефекты включают:
Необработанное исключение, излучаемое из noexcept
функция
Неожиданное исключение, возникающее при построении объекта аргумента throw
оператор
catch
операторы, улавливающие исключения по значению, а не по ссылке
catch
операторы, скрывающие последующие catch
операторы.
Для получения дополнительной информации о конкретных дефектах смотрите C++ Exception Defects
Параметр командной строки
: cpp_exceptions
Эти дефекты связаны с многозадачным кодом.
Дефекты гонки данных возникают, когда несколько задач работают с общей переменной или вызывают не входящую стандартную функцию библиотеки без защиты.
Конкретные дефекты см. в разделе Дефекты параллелизма.
Параметр командной строки
: concurrency
Дефекты блокировки возникают, когда критические секции не настроены должным образом. Для примера:
Критические участки вовлечены в тупик.
Функция блокировки не имеет соответствующей функции разблокировки.
Функция блокировки вызывается дважды без промежуточного вызова функции разблокировки.
Критические разделы защищают общие переменные от параллельного доступа. Polyspace® ожидает, что критические разделы будут соответствовать определенному формату. Критический раздел должен находиться между вызовом функции блокировки и вызовом функции разблокировки.
Конкретные дефекты см. в разделе Дефекты параллелизма.
Параметр командной строки
: concurrency
Эти дефекты связаны с неправильным использованием стандартных программ криптографии из библиотеки OpenSSL. Для образца:
Использование криптографически слабых алгоритмов
Отсутствие существенных элементов, таких как ключ шифра или вектор инициализации
Неправильный порядок криптографических операций
Конкретные дефекты см. в разделе Дефекты криптографии.
Параметр командной строки
: cryptography
Эти дефекты являются ошибками, связанными с тем, как информация перемещается по всему коду. Дефекты включают:
Мертвый или недоступный код
Неиспользованный код
Неинициализированная информация
Для конкретных дефектов см. «Дефекты потока данных».
Параметр командной строки
: data_flow
Эти дефекты являются ошибками, связанными с использованием памяти, когда память динамически выделяется. Дефекты включают:
Освобождение динамически выделенной памяти
Незащищенные выделения памяти
Для конкретных дефектов см. «Динамические дефекты памяти».
Параметр командной строки
: dynamic_memory
Эти дефекты позволяют вам наблюдать хорошие практики кодирования. Дефекты сами по себе могут не вызвать сбоя, но иногда они выделяют более серьезные логические ошибки в вашем коде. Дефекты также делают ваш код уязвимым для атак и трудным для обслуживания.
Дефекты включают:
Жестко закодированные константы, такой как buffer size и контур цикла
Неиспользованные параметры функции
Конкретные дефекты см. в разделе «Дефекты надлежащей практики».
Параметр командной строки
: good_practice
Эти дефекты являются ошибками, относящимися к переменным в вашем коде; их значения, типы данных и использование. Дефекты включают:
Математические операции
Переполнение преобразования
Оперативное переполнение
Конкретные дефекты см. в разделе «Численные дефекты».
Параметр командной строки
: numerical
Эти дефекты связаны с объектно-ориентированным аспектом программирования C++. Дефекты подсвечивают проблемы проекта классов или проблемы в иерархии наследования.
Дефекты включают:
Представитель данных не инициализирован или неправильно инициализирован в конструкторе
Неправильное переопределение методов базовых классов
Нарушение инкапсуляции данных
Для конкретных дефектов смотрите Объектно-ориентированные дефекты.
Параметр командной строки
: object_oriented
Эти дефекты обнаруживают такие проблемы, как ненужные копии данных и неэффективные стандартные функции C++, которые могут привести к узким местам эффективности в коде С++.
Дефекты включают:
const
параметры или возвращаемые значения принудительно копируют вместо операций перемещения
Неэффективные функции для вставки новой строки и расчета длины строки
Конкретные дефекты см. в разделе «Дефекты эффективности».
Параметр командной строки
: performance
Эти дефекты являются ошибками, относящимися к синтаксису программирования. Эти дефекты включают:
Операторы присвоения и равенства
Несоответствия между квалификаторами или объявлениями переменных
Плохо отформатированные строки
Для конкретных дефектов смотрите Программные дефекты.
Параметр командной строки
: programming
Эти дефекты связаны с обработкой файлов. Дефекты включают:
Незакрытый поток файлов
Операции с файлом потоком после его закрытия
Конкретные дефекты см. в разделе «Дефекты управления ресурсами».
Параметр командной строки
: resource_management
Эти дефекты являются ошибками, связанными с использованием памяти, когда память статически выделена. Дефекты включают:
Доступ к массивам за пределами их границ
Пустые указатели
Приведение указателей
Для конкретных дефектов см. «Статические дефекты памяти».
Параметр командной строки
: static_memory
Эти дефекты выделяют места в вашем коде, которые уязвимы для взлома или других атак безопасности. Многие из этих дефектов не вызывают ошибок во время выполнения, но вместо этого указывают на рискованные области в вашем коде. Дефекты включают:
Управление конфиденциальными данными
Использование опасных или устаревших функций
Генерация случайных чисел
Внешне управляемые пути и команды
Для получения дополнительной информации о конкретных дефектах см. «Дефекты безопасности».
Параметр командной строки
: security
Эти дефекты подсвечивают элементы вашего кода, которые из незащищенных источников. Злоумышленники могут использовать входные данные или пути, чтобы атаковать вашу программу и вызвать отказы. Эти дефекты подсвечивают элементы вашего кода, которые уязвимы. Дефекты включают:
Использование тонированных переменных или указателей
Пути, управляемые извне
Для получения дополнительной информации о конкретных дефектах см. «Дефекты испорченных данных». Можно изменить поведение испорченных дефектов данных с помощью необязательной команды -consider-analysis-perimeter-as-trust-boundary
. См. -consider-analysis-perimeter-as-trust-boundary
.
Параметр командной строки
: tainted_data