Для более точного анализа с Polyspace® можно задать внешние ограничения на:
Глобальные переменные.
Пользовательские функции.
Ограничения на пользовательские функции не применяются к анализу Средства поиска Ошибки.
Заблокированные функции.
Ограничения на заблокированные функции не применяются к анализу Средства поиска Ошибки.
Для получения дополнительной информации смотрите, Задают Внешние Ограничения. Для частичного списка ограничений смотрите Ограничительные Ограничения Спецификации.
В пользовательском интерфейсе десктопных решений Polyspace можно задать ограничения через окно Constraint Specification. Ограничения сохранены в XML-файле, который можно снова использовать для других проектов.
Эта таблица объясняет различные столбцы в окне Constraint Specification. Если вы непосредственно редактируете ограничительный XML-файл, чтобы задать ограничение (например, в Серверных продуктах Polyspace), эта таблица также показывает соответствие между столбцами в пользовательском интерфейсе и записями в XML-файле. Запись XML, подсвеченная полужирным, появляется в соответствующем столбце окна Constraint Specification.
Столбец | Настройки | Запись XML-файла |
---|---|---|
Name | Отображает список переменных и функций в вашем Проекте, для которого можно указать диапазоны данных. Это Отображения столбца три расширяемых пункта меню:
|
<function name = "funcName" ...>
<scalar name = "arg1" ...>
<pointer name = "arg2" ...> |
File | Отображает имя исходного файла, содержащего переменную или функцию. |
<file name = "C:\Project1\Sources\file.c" ...> |
Attributes | Информация об отображениях о переменной или функции. Например, статические переменные отображают |
<function name="funcName" attributes="unused" ...> |
Data Type | Отображает тип переменной. |
<scalar name="arg1" complete_type="int32" ...> |
Main Generator Called | Применимый только для пользовательских функций. Задает, вызывает ли основной генератор функцию:
|
<function name="funcName" main_generator_called="MAIN_GENERATOR" ...> |
Init Mode | Задает, как программное обеспечение присваивает область значений переменной:
Пользовательские функции поддерживают только Интерфейсные функции поддерживают только Для верификаций C глобальные указатели поддерживают
|
<scalar name="arg1" init_mode="INIT" ...> |
Init Range | Задает минимальные и максимальные значения для переменной. Можно использовать ключевые слова Можно также использовать шестнадцатеричные значения. Например: Для Для enum week{ sunday, monday=0, tuesday, wednesday, thursday, friday, saturday}; |
<scalar name="arg1" init_range="-1..0"...> |
Initialize Pointer | Применимый только к указателям. Enabled только, когда вы задаете Init Mode: Задает, должен ли указателем быть NULL:
ПримечаниеНе применимый для проектов C++. Смотрите Ограничительные Ограничения Спецификации. |
<pointer name="arg1" initialize_pointer="Not NULL"...> |
Init Allocated | Применимый только к указателям. Enabled только, когда вы задаете Init Mode: Задает, как резкий объект выделяется:
ПримечаниеНе применимый для проектов C++. Смотрите Ограничительные Ограничения Спецификации. |
<pointer name="arg1" init_pointed="MAIN_GENERATOR"...> |
# Allocated Objects | Применимый только к указателям. Задает, на сколько объектов указывает указатель (резкий объект рассматривается как массив). Параметр Init Allocated задает, сколько выделенных объектов на самом деле инициализируется. Например, рассмотрите этот код: void func(int *ptr) { assert(ptr[0]==1); assert(ptr[1]==1); }
оба утверждения являются зелеными. Однако, если вы задаете эти ограничения:
второе утверждение является оранжевым. Только первый объект, что ПримечаниеНе применимый для проектов C++. Смотрите Ограничительные Ограничения Спецификации. |
<pointer name="arg1" number_allocated="10"...> |
Global Assert | Задает, выполнить ли утверждение, проверяют переменную при глобальной инициализации, и после каждого присвоения. |
<scalar name="glob" global_assert="YES"...> |
Global Assert Range | Задает минимальные и максимальные значения для области значений, которую вы хотите проверять. |
<scalar name="glob" assert_range="0..200"...> |
Comment | Комментарии, что вы вводите, например, выравнивание для своих значений DRS. |
<scalar name="glob" comment="Speed Range"...> |
Вы не можете задать эти ограничения:
Указатели C++ не могут быть ограничены:
На C++ вы не можете ограничить аргументы указателя функций. Функции, которые имеют аргументы указателя только, не появляются в ограничительном интерфейсе спецификации.
Из-за полиморфизма указатель C++ может указать на объекты нескольких классов в иерархии классов и может потребовать вызывающих различных конструкторов. Предварительный анализ для ограничительной спецификации не может определить который тип объекта ограничить или который конструктор вызвать.
Ограничения не могут быть отношениями:
Вы не можете задать ограничение, которое связывает возвращаемое значение функции к ее входным параметрам. Можно только указать постоянный диапазон для ограничений.
Несколько областей значений, не возможных:
Вы не можете указать несколько диапазонов для ограничения. Например, вы не можете указать, что аргумент функции имеет или значение-1 или значение в области значений [1,100]. Вместо этого укажите диапазон [-1 100] или выполните два отдельных исследования, однажды со значением-1 и однажды с областью значений [1,100].