Polyspace® использует код, который вы предоставляете, чтобы сделать предположения об элементах, таких как переменные диапазоны и позволенный buffer size для указателей. Иногда предположения, что Polyspace делает, более широки, чем, что вы ожидаете, который может привести к ложным положительным сторонам Bug Finder или большему количеству Code Prover оранжевые проверки. Чтобы уменьшать такие ложные положительные стороны или оранжевые проверки, можно задать внешние ограничения на:
Глобальные переменные.
Пользовательские функции.
Ограничения на пользовательские функции не применяются к анализу Bug Finder.
Заблокированные функции.
Ограничения на заблокированные функции не применяются к анализу Bug Finder.
Для получения дополнительной информации смотрите, Задают Внешние Ограничения. Для частичного списка ограничений смотрите Ограничительные Ограничения Спецификации.
В Bug Finder можно ограничить только глобальные переменные.
Чтобы уменьшать ложные положительные стороны, дефекты от неограниченных входных параметров подавлены во время анализа Bug Finder. Чтобы найти эти виды дефектов, не используйте внешние ограничения. Вместо этого чтобы запустить более строгий анализ Bug Finder, который рассматривает возможные пути к выполнению кода, используйте Run stricter checks considering all values of system inputs (-checks-using-system-input-values)
. Смотрите расширяют средства проверки Bug Finder, чтобы найти дефекты от определенных системных входных значений.
В пользовательском интерфейсе десктопных решений 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].