exponenta event banner

Внешние ограничения для анализа в пространстве

Для более точного анализа с помощью Polyspace ® можно задать внешние ограничения для:

  • Глобальные переменные.

  • Пользовательские функции.

    Ограничения на определяемые пользователем функции не применяются к анализу Bug Finder.

  • Упорные функции.

    Ограничения на упорные функции не применяются к анализу Bug Finder.

Дополнительные сведения см. в разделе Указание внешних ограничений. Частичный список ограничений см. в разделе Ограничения спецификации ограничений.

В интерфейсе пользователя настольных продуктов Polyspace можно указать ограничения в окне Спецификация ограничений (Constraint Specification). Ограничения сохраняются в XML-файле, который можно повторно использовать для других проектов.

В этой таблице описаны различные столбцы в окне Спецификация ограничений (Constraint Specification). При непосредственном редактировании XML-файла ограничения для указания ограничения (например, в продуктах Polyspace Server) в этой таблице также отображается соответствие между столбцами в интерфейсе пользователя и записями в XML-файле. Выделенная полужирным шрифтом запись XML появляется в соответствующем столбце окна Спецификация ограничения (Constraint Specification).

КолонкаНастройкиЗапись XML-файла
Имя

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

В этом столбце отображаются три расширяемых пункта меню:

  • Глобальные (Globals) - отображение глобальных переменных в проекте.

  • Пользовательские функции - отображение пользовательских функций в проекте. Разверните имя функции, чтобы увидеть ее входные данные.

  • Упорные функции - отображает список функций-заглушек в проекте. Разверните имя функции, чтобы увидеть входные и возвращаемые значения.

<function name = "funcName" ...>

<scalar name = "arg1" ...>

<pointer name = "arg2" ...>

ФайлОтображает имя исходного файла, содержащего переменную или функцию.
<file name = "C:\Project1\Sources\file.c" ...>
Признаки

Отображает информацию о переменной или функции.

Например, отображаются статические переменные static. Отображение несмонтированных функций unused.

<function name="funcName" attributes="unused" ...>
Тип данныхОтображение типа переменной.
<scalar name="arg1" complete_type="int32" ...>
Вызываемый основной генератор

Применимо только для пользовательских функций.

Указывает, вызывает ли главный генератор функцию:

  • MAIN GENERATOR - Главный генератор может вызвать эту функцию, в зависимости от значения -functions-called-in-loop (C) или -main-generator-calls (C++) параметр.

  • NO - Главный генератор не будет вызывать эту функцию.

  • YES - Главный генератор вызовет эту функцию.

<function name="funcName" main_generator_called="MAIN_GENERATOR" ...>
Режим инициализации

Указывает, как программа назначает диапазон переменной:

  • MAIN GENERATOR - Переменный диапазон назначается в зависимости от настроек опций главного генератора -main-generator-writes-variables и -no-def-init-glob.

  • IGNORE - Переменная не назначается ни одному диапазону, даже если указан диапазон.

  • INIT - Переменная назначается указанному диапазону только при инициализации и сохраняет диапазон до первой записи.

  • PERMANENT - Переменная постоянно назначена указанному диапазону. Если переменная назначена за пределами этого диапазона во время программы, предупреждение не выдается. Используйте globalassert режим, если требуется предупреждение.

Поддержка только пользовательских функций INIT режим.

Поддержка только функций заглушки PERMANENT режим.

Для проверок C поддержка глобальных указателей MAIN GENERATOR, IGNORE, или INIT режим.

  • MAIN GENERATOR - Указатель следует за опциями главного генератора.

  • IGNORE - Указатель не инициализирован

  • INIT - Укажите, имеет ли указатель значение NULL и как выделяется указанный объект (параметры Initialize Pointer и Init Allocated).

<scalar name="arg1" init_mode="INIT" ...>
Диапазон инициализации

Указывает минимальное и максимальное значения переменной.

Можно использовать ключевые слова min и max для обозначения минимального и максимального значений типа переменной. Например, для типа long, min и max соответствуют -2 ^ 31 и 2 ^ 31-1 соответственно.

Можно также использовать шестнадцатеричные значения. Например: 0x12..0x100

Для enum переменные, диапазоны нельзя задавать непосредственно с помощью констант перечислителя. Вместо этого используйте значения, представленные константами.

Для enum переменные, также можно использовать ключевые слова enum_min и enum_max для обозначения минимального и максимального значений, которые может принимать переменная. Например, для enum переменная типа, определенного ниже, enum_min равно 0 и enum_max равно 5:

enum week{ sunday, monday=0, tuesday, wednesday, thursday, friday, saturday};

<scalar name="arg1" init_range="-1..0"...>
Инициализация указателя

Применимо только к указателям. Включено только при указании режима Init:INIT.

Указывает, должен ли указатель иметь значение NULL:

  • May-be NULL - Указатель может быть нулевым указателем (или нет).

  • Not Null - Указатель никогда не инициализируется как нулевой указатель.

  • Null - указатель инициализирован как NULL.

Примечание

Неприменимо для проектов C++. См. раздел Ограничения спецификации ограничений.

<pointer name="arg1" initialize_pointer="Not NULL"...>
Init Allocated

Применимо только к указателям. Включено только при указании режима Init:INIT.

Указывает способ назначения остроконечного объекта:

  • MAIN GENERATOR - Заостренный объект выделяется основным генератором.

  • NONE - Заостренный объект не написан.

  • SINGLE - Инициализируется указанный объект или первый элемент массива.

  • MULTI - Инициализируются все объекты (или элементы массива).

Кроме того, для аргументов указателя на упорные функции доступны две другие опции:

  • SINGLE_CERTAIN_WRITE - Указанный объект или первый элемент массива инициализируется упорной функцией.

  • MULTI_CERTAIN_WRITE - Все точечные объекты (или элементы массива) инициализируются упорной функцией.

Для упорных функций - опции SINGLE и MULTI означает вероятную инициализацию вместо определенной инициализации.

Примечание

Неприменимо для проектов C++. См. раздел Ограничения спецификации ограничений.

<pointer name="arg1" init_pointed="MAIN_GENERATOR"...>
# Присвоенные объекты

Применимо только к указателям.

Указывает, на какое количество объектов указывает указатель (указанный объект рассматривается как массив).

Параметр Init Allocated указывает, сколько выделенных объектов действительно инициализировано. Например, рассмотрим этот код:

void func(int *ptr) {
    assert(ptr[0]==1);
    assert(ptr[1]==1);
}
Если заданы следующие ограничения:

  • ptr имеет значение Init Allocated MULTI и # Назначенные объекты установлены в 2,

  • *ptr имеет значение Init Range 1..1,

оба утверждения зеленые. Однако если заданы следующие ограничения:

  • ptr имеет значение Init Allocated SINGLE

  • *ptr имеет значение Init Range 1..1,

второе утверждение оранжевое. Только первый объект, который ptr точки для инициализации в 1. Объекты за пределами первого могут быть потенциально полными по дальности.

Примечание

Неприменимо для проектов C++. См. раздел Ограничения спецификации ограничений.

<pointer name="arg1" number_allocated="10"...>
Глобальное утверждениеУказывает, следует ли выполнять проверку утверждения переменной при глобальной инициализации и после каждого назначения.
<scalar name="glob" global_assert="YES"...>
Глобальный диапазон подтвержденияУказывает минимальное и максимальное значения для диапазона, который требуется проверить.
<scalar name="glob" assert_range="0..200"...>
КомментарийПримечания, вводимые, например, для обоснования значений DRS.
<scalar name="glob" comment="Speed Range"...>

Ограничения спецификации ограничений

Нельзя задать следующие ограничения:

  • Нельзя ограничить указатели C++:

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

    Из-за полиморфизма указатель C++ может указывать на объекты нескольких классов в иерархии классов и может требовать вызова различных конструкторов. Предварительный анализ для спецификации ограничения не может определить, какой тип объекта следует ограничить или какой конструктор вызвать.

  • Зависимости не могут быть уравнениями:

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

  • Несколько диапазонов невозможно:

    Нельзя задать несколько диапазонов для ограничения. Например, нельзя указать, что аргумент функции имеет значение -1 или значение в диапазоне [1100]. Вместо этого укажите диапазон [-1100] или выполните два отдельных анализа, один раз со значением -1 и один раз с диапазоном [1100].

Связанные темы