Выполните один или несколько из этих шагов, пока не определите исправление для проверки переполнения. Существует несколько способов исправления чека. Описание проверки и примеры кода см. в разделе Overflow.
Иногда, особенно для оранжевой проверки, можно определить, что проверка представляет собой не реальную ошибку, а предположение Polyspace ®, которое не соответствует вашему коду. Если для смягчения предположения можно использовать опцию анализа, повторно запустите проверку с помощью этой опции. В противном случае в результат или код можно добавить комментарий и обоснование.
Общий рабочий процесс, применяемый ко всем проверкам, см. в разделе Интерпретация результатов проверки кода в пользовательском интерфейсе Polyspace Desktop.
Установите курсор на переполняющую операцию.

Получите из подсказки следующую информацию:
Переменная операнда, которую можно ограничить во избежание переполнения.
В предыдущем примере левый операнд, val, имеет полный диапазон значений.
Возможное исправление: Чтобы избежать переполнения, выполняйте умножение только в том случае, если val находится в определенном диапазоне.
if(val < INT_MAX/2)
return(val*2);
else
/* Alternate action */Вероятная причина переполнения, если указано во всплывающей подсказке.
В предыдущем примере программное обеспечение идентифицирует упертую функцию, getVal, в качестве вероятной причины.
Возможное исправление: Чтобы избежать переполнения, ограничьте возвращаемое значение getVal. Например, укажите, что getVal возвращает значения в определенном диапазоне, например, 1..10. Дополнительные сведения см. в разделе Допущения о упорных функциях.
Трассировка потока данных, начиная с переменной операнда, которую требуется ограничить. Определите подходящую точку для задания ограничения.
В следующем примере трассировка потока данных, начиная с tempVal.
val = func();
.
.
tempVal = val;
.
.
tempVal++ ;tempVal получает полный диапазон значений из val.
Возможное исправление: Назначить val кому tempVal только если val меньше определенного значения.
val получает полный диапазон значений из func.
Возможное исправление: Ограничение возвращаемого значения func, либо в теле func или через интерфейс спецификации ограничений Polyspace, если func упряжен. Дополнительные сведения см. в разделе Допущения о упорных функциях.
Чтобы отследить поток данных, выберите проверку и запишите информацию на панели Сведения о результате (Result Details).
Если на панели Сведения о результате (Result Details) отображается последовательность инструкций, которые приводят к проверке, выберите каждую инструкцию.
Если на панели Сведения о результате (Result Details) отображается номер строки вероятной причины проверки, щелкните правой кнопкой мыши панель Источник (Source). Выберите «Перейти к строке».
В противном случае:
Найдите предыдущую операцию записи для переменной операнда.
Пример: Предыдущая операция записи на tempVal является tempVal=val.
При предыдущей операции записи определите новую переменную для обратной трассировки.
Установите курсор на переменные, участвующие в операции записи, чтобы увидеть их значения. Значения помогают выбрать переменную для трассировки.
Пример: В tempVal=val, вы находите, что val имеет полный диапазон значений. Поэтому вы отслеживаете val.
Найдите предыдущую операцию записи для новой переменной. Таким образом можно продолжить трассировку до тех пор, пока не будет определена точка для задания ограничения.
Пример: Предыдущая операция записи на val является val=func(). Можно задать ограничение для возвращаемого значения func.
В зависимости от переменной используйте следующие сочетания клавиш навигации для поиска предыдущих экземпляров. В интерфейсе пользователя Polyspace можно выполнить только следующие действия.
| Переменная | Поиск предыдущих экземпляров переменной |
|---|---|
Локальная переменная | Используйте один из следующих методов.
|
Глобальная переменная Щелкните правой кнопкой мыши переменную. Если отображается опция Показать в представлении доступа к переменной, переменная является глобальной переменной. |
|
Возвращаемое значение функции
ret=func(); |
|
Можно также определить, связаны ли переменные в какой-либо операции с какой-либо предыдущей операцией. См. раздел Поиск связей между переменными в коде.
Совет
Чтобы различать целочисленные и плавающие переполнения, используйте столбец Подробности (Detail) на панели Список результатов (Results List). Щелкните заголовок столбца, чтобы группировать целочисленные переполнения и переполнения с плавающей запятой. Если столбец подробных данных не отображается, щелкните правой кнопкой мыши любой другой заголовок столбца и включите этот столбец.
Если операция, вызывающая переполнение, происходит в цикле или в теле рекурсивной функции:
Проверьте, можно ли уменьшить количество циклов или рекурсий.
Проверьте, можно ли поместить условие выхода в цикл или рекурсивную функцию до переполнения операции.
Проверьте, можно ли отследить оранжевый чек по предположению Polyspace, которое встречается ранее в коде. Если предположение не соответствует действительности в вашем случае, добавьте комментарий или обоснование в результат или код. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.
Например, в коде используется изменчивая переменная. Затем:
Polyspace предполагает, что изменчивая переменная является переменной полного диапазона на каждом шаге кода.
Операция, использующая эту переменную, может переполняться и поэтому является оранжевой.
Если известно, что переменная принимает меньший диапазон значений, добавьте в код комментарий и обоснование, описывающие, почему код не был изменен.
Дополнительные сведения см. в разделе Допущения анализа проверки кода.
Примечание
Прежде чем обосновывать проверку оранжевого цвета, тщательно продумайте, можно ли улучшить дизайн кода.