Если Polyspace® анализ вашего кода находит известные или приемлемые дефекты или кодирующий нарушения правила, можно подавить дефекты или нарушения в последующих исследованиях. Добавьте аннотации кода, указывающие, что вы рассмотрели проблемы и что вы не намереваетесь зафиксировать их.
Можно добавить аннотации через пункты меню в пользовательском интерфейсе Polyspace (или плагины IDE) или путем ввода их непосредственно в коде. Для общего рабочего процесса добавляющих аннотаций:
В пользовательском интерфейсе рабочего стола Polyspace смотрите Результаты Polyspace Адреса Через Исправления ошибок или Выравнивания.
В Polyspace доступ к веб-интерфейсу смотрите Результаты Адреса в Polyspace доступ Через Исправления ошибок или Выравнивания.
В ИДАХ с помощью Polyspace, когда Вы Кодируете плагины или расширения, видите Polyspace Анализа, как Вы Кодируете Результаты в ИДАХ.
Эта тема показывает синтаксис аннотации.
Обратите внимание на то, что вы не можете скрыть ошибки времени выполнения, обнаруженные с Code Prover из вашего исходного кода даже с аннотациями кода. Однако как все другие результаты, информация об анализе, сопоставленная с ошибкой времени выполнения, извлечена из соответствующей аннотации кода и показана результатом.
Чтобы добавить комментарии непосредственно в ваш исходный файл, используйте синтаксис аннотации Polyspace. Синтаксис не является чувствительным к регистру, и имеет следующий формат. Оба C разрабатывают комментарии в /* */
и C++ разрабатывает комментарии начиная с //
поддерживаются.
Чтобы аннотировать результат на текущей строке кода (включая макросы), используйте этот синтаксис:
line of code; /* polyspace Family:Result_name */
Например:
var++; /* polyspace DEFECT:INT_OVFL */
Аннотации начинаются с ключевого слова polyspace
и должен включать Family
и Result_name
значения полей.
Можно опционально задать Status
, Severity
, и Comment
значение поля:
polyspace Family:Result_name [Status:Severity] "Comment"
Например:
var++; /* polyspace DEFECT:INT_OVFL [Justified:Low] "Overflow taken into account."*/
Если вы не задаете состояние, Polyspace считает результат выровненным по ширине и присваивает состояние No action planned
к результату.
Для получения дальнейшей информации смотрите Детали Синтаксиса Аннотации и Примеры Синтаксиса.
Чтобы аннотировать блок кода, используйте следующий синтаксис.
Аннотация для текущей строки кода и n
следующие линии:
line of code; /* polyspace +n Family:Result_name */
Аннотация для блока кода:
/* polyspace-begin Family:Result_name */ { block of code } /* polyspace-end Family:Result_name */
Опционально, задайте состояние, серьезность и комментарий.
Если аннотации для результатов с тем же Family
и Result_name
вкладываются, самая внутренняя аннотация используется.
Например, в этом коде, аннотация на линию 9 применяется вместо аннотации блока, но аннотация блока применяется к нарушению на линии 7.
1 /*polyspace-begin MISRA-C:14.9 [To fix:High] "Block annotation"*/ 2 int main(void) 3 { 4 int x = 1; 5 int y = x / 2; 6 7 if (y < 0) /* Block annotation is applied to this violation of MISRA-C:14.9*/ 8 y++; 9 if (x > y) /*polyspace MISRA-C:14.9 [Justified:Low] "Nested annotation applied"*/ 10 return x; 11 return x; 12 } 13 /*polyspace-end MISRA-C:14.9 [To fix:High] "Block annotation"*/ |
Если вы применяете аннотацию к нескольким строкам кода, аннотация не применяется к зеленым регистрациям кода. Когда вы повторно выполняете анализ, эти зеленые проверки не рассматриваются выровненными по ширине, и их Status
и Severity
в Results List не превращаются в Status
и Severity
из аннотации.
Для получения дальнейшей информации смотрите Детали Синтаксиса Аннотации и Примеры Синтаксиса.
Чтобы выровнять по ширине несколько результатов в той же аннотации, используйте следующий синтаксис.
Если результаты принадлежат тому же семейству, задают разделенные от запятой имена результата.
line of code; /* polyspace Family:Result_1_name,Result_2_name */
Если результаты принадлежат различным семействам, задают разделенные пробелом фамилии.
line of code; /* polyspace Family_1:Result_1_name Family_2:Result_2_name */
Опционально, задайте состояние, серьезность и комментарий.
Для получения дальнейшей информации смотрите Детали Синтаксиса Аннотации и Примеры Синтаксиса.
Чтобы заменить различные поля аннотации на их позволенные значения, используйте значения в этой таблице или смотрите примеры.
Поле | Позволенное значение |
---|---|
Family | Тип результата анализа:
Чтобы задать все результаты анализа, используйте символ звездочки Смотрите примеры синтаксиса. |
Result_name | Для Для Для Для Для кодирования стандартных нарушений задайте номер правила или числа. Чтобы задать все части результата называют Смотрите примеры синтаксиса. |
Status | Текст, чтобы указать, как вы намереваетесь исправить ошибку в своем коде. Это значение заполняет столбец Status в панели Results List как:
Polyspace подавляет результаты, аннотируемые состоянием |
Severity | Текст, чтобы указать, как очень важный вы рассматриваете ошибку в своем коде. Это значение заполняет столбец Severity в панели Results List как:
Если вы задаете серьезность, которая не является позволенным значением, Polyspace добавляет его к полю состояния и хранит его как пользовательское состояние. Например, |
Comment | Дополнительный текст, такой как ключевое слово или объяснение состояния и серьезности. Это значение заполняет столбец Comment в панели Results List. Дополнительный текст может охватить больше чем одну линию в коде. При показе этого текста в отчетах начальные и конечные пробелы на линии объединены в один пробел так, чтобы целый текст мог быть считан как одиночный абзац. |
Введите аннотацию на ту же линию как дефект и задайте Family
(DEFECT
) и Result_name
(INT_OVFL
). Когда вы не задаете состояние, Polyspace присваивает состояние No action planned
, и затем подавляет результат в последующих исследованиях.
int var = INT_MAX; var++; /* polyspace DEFECT:INT_OVFL */ |
Выровняйте по ширине кодирующее стандартное нарушение, например, нарушение CERT-C.
Введите аннотацию на ту же линию как нарушение и задайте Family
(CERT-C
) и Result_name
(номер правила, например, STR31-C
). Присвойте состояние Justified
, серьезность Low
и комментарий.
line of code; /* polyspace CERT-C:STR31-C [Justified:Low] "Overflow cannot happen because of external constraints." */ |
Введите аннотацию с +n
между polyspace
и
записи. Аннотация применяется к той же линии и Family
:Result_name
n
следующие линии.
Эта аннотация применяется к линиям 4–7. Количество линии включает код, комментарии и пустые строки.
4. line of code ; // polyspace +3 MISRA2012:* 5. //comment 6. 7. line of code; 8. line of code; |
Чтобы аннотировать метрики сложности кода функционального уровня, в функциональном определении, вводят аннотацию на ту же линию как имя функции.
Эта аннотация подавляет все метрики сложности кода для функционального func
:
char func(char param) { //polyspace CODE-METRICS:* ... } |
Введите каждое семейство, разделенное пробелом. Эта аннотация применяется ко всем правилам MISRA C:2012 17 и ко всем проверкам на этапе выполнения.
line of code; /* polyspace MISRA2012:17.* RTE:* */ |
После того, как вы задаете
(Family
DEFECT
), введите каждый
разделенный запятой.Result_name
system("rm ~/.config"); /* polyspace DEFECT:UNSAFE_SYSTEM_CALL,RETURN_NOT_CHECKED */ |
Чтобы выровнять по ширине результат Code Prover, показывающий использование глобальной переменной, например, неиспользованную глобальную переменную, вводят аннотацию рядом с объявлением переменной.
Например, чтобы подавить глобальную переменную заканчиваются с Justified
состояние, Low
серьезность и некоторые комментарии, можно ввести аннотацию как это:
int var; /* polyspace VARIABLE:* [Justified: Low] "Storage repo for later use"*/
После того, как вы задаете
и Family
, можно добавить Result_name
с дополнительной информацией для вашего выравнивания. Можно предоставить комментарий всем семействам и закончиться имена или комментарий для каждого семейства или закончиться имя.Comment
//Single comment |
В аннотациях Polyspace игнорирует весь текст после двойных кавычек. Задавать дополнительный
или Family
:Result_name
Состояние
:Severity
]
записи, необходимо повторно войти в ключевое слово Comment
polyspace
после текста в двойных кавычках.
Можно задать позволенные значения или ввести пользовательские значения для состояния и серьезности. Пользовательская запись серьезности добавлена к состоянию и сохранена как пользовательский Status в пользовательском интерфейсе.
//Set Status only line of code; /* polyspace DEFECT:* [To fix] "some comment" */ //Set Status 'To fix' and Severity 'High' line of code; /* polyspace VARIABLE:* [To fix: High] "some comment"*/ //Set custom status 'Assigned' and Severity 'Medium' line of code; /* polyspace MISRA2012:12.* [Assigned: Medium] */ |
Если вы вводите аннотацию кода неправильно, или аннотация больше не применяется, аналитический журнал содержит предупреждение:
Warning: These Polyspace annotations do not apply to the current code
Проблема больше не обнаруживается из-за кода, фиксирует или изменяется в аналитической настройке.
Например, аннотация, такая как:
/* polyspace RTE:IDP [No action planned:Low] */
IDP
), который был ранее красным или оранжевым, является теперь зеленым.Синтаксис аннотации является неправильным.
Аннотация, начинающаяся с polyspace
сопровождаемый словом и затем :
(двоеточие), такое как:
// polyspace Family :
Family
следующий polyspace
не тип результата Polyspace, такого как DEFECT
или RTE
, анализ рассматривает аннотацию как недопустимую и показывает предупреждение. Например, эта аннотация инициировала предупреждение:// polyspace TODO: Fix in March dev cycle
TODO
не тип результата Polyspace. Чтобы избежать этих предупреждений, используйте другую диафрагму, например, вместо двоеточия. Для полного списка типов результата смотрите Синтаксис Аннотации Кода.