После верификации вы видите в графиках Code covered by verification, что значительный фрагмент вашего кода не проверялся на ошибки времени выполнения.
Например, в следующем графике, панель Dashboard показывает, что целых 75% ваших функций не проверялись на ошибки времени выполнения. (В функциях, которые проверялись, не проверялись только 7% операций.)
Процент кода непроверенный в покрытиях графика Code covered by verification:
Функции и операции, которые не проверяются, потому что они, как доказывают, недостижимы.
Они кажутся серыми на панели Source.
Функции и операции, которые не доказаны недостижимыми, но не проверенные по некоторой другой причине.
Они кажутся черными на панели Source.
Кликните по графику Code covered by verification, чтобы видеть список функций непроверенных.
Если некоторым файлам не удается скомпилировать, анализ Polyspace® продолжает остающиеся файлы. Однако анализ не проверяет нескомпилированные файлы на ошибки времени выполнения.
Чтобы видеть, не скомпилировали ли некоторые файлы, проверяйте панель Dashboard или Output Summary. Чтобы убедиться, что все файлы компилируют перед анализом, используйте опцию Stop analysis if a file does not compile (-stop-if-compile-error)
.
Зафиксируйте ошибки компиляции и повторно выполните анализ.
Для получения дополнительной информации о:
Как компиляция Polyspace работает, смотрите Компиляцию Поиска и устранения неисправностей и Соединение Ошибок.
Определенные ошибки компиляции, смотрите Ошибки компиляции Поиска и устранения неисправностей.
У вас есть красная или серая проверка к началу иерархии вызова функции. Красные или серые проверки могут привести к последующему коду непроверенному.
Красная проверка: верификация не проверяет последующие операции в блок кода, содержащий красную проверку.
Серая проверка: Серые проверки указывают на недостижимый код. Верификация не проверяет операции в недостижимый код для ошибок времени выполнения.
Если вы вызываете функции от блока кода непроверенного, верификация не проверяет те функции также. Если у вас есть красная или серая проверка к началу иерархии вызова, функции далее на в иерархии не могут проверяться. Вы заканчиваете с существенным количеством кода непроверенного.
Например, в следующем коде, только 1 из 4 функций проверяется, и график Procedure показывает 25%. Функции func_called_from_unreachable_1
, func_called_from_unreachable_2
и func_called_after_red
не проверяются. Только main
проверяется.
void func_called_from_unreachable_1(void) { } void func_called_from_unreachable_2(void) { } void func_called_after_red(void) { } int glob_var; void main(void) { int loc_var; double res; glob_var=0; glob_var++; if (glob_var!=1) { func_called_from_unreachable_1(); func_called_from_unreachable_2(); } res=0; /* Division by zero occurs in for loop */ for(loc_var=-10;loc_var<10;loc_var++) { res += 1/loc_var; } func_called_after_red(); }
Смотрите если main
функционируйте или другая функция Задач имеет красные или серые проверки. Смотрите, вызываете ли вы большинство своих функций из последующего кода непроверенного.
Перейти от main
вниз иерархия вызова функции и идентифицирует, где код непроверенный начинается, используйте функции навигации на панели Call Hierarchy. Если вы не видите панель по умолчанию, выберите Window> Show/Hide View> Call Hierarchy. Для получения дополнительной информации смотрите Иерархию Вызова.
В качестве альтернативы можно рассмотреть произвольную функцию непроверенную и заняться расследованиями, почему она не проверяется. Смотрите, запрашивает ли то же обоснование много функций. Чтобы обнаружить, если функция не вызвана вообще от точки входа или названа из недостижимого кода, используйте опцию Detect uncalled functions (-uncalled-function-checks)
.
Рассмотрите красные или серые проверки и зафиксируйте их.
Вы не задавали необходимые опции анализа. Когда неправильно задано, следующие опции могут вызвать неконтролируемый код:
Многозадачные опции: Если вы проверяете многозадачный код через эти опции, вы задаете свои функции точки входа.
Возможные ошибки в спецификации включают:
Вы ожидали, что автоматическое обнаружение параллелизма обнаружит ваше создание потока, но вы используете примитивы создания потока, которые еще не поддерживаются для автоматического обнаружения.
С ручной многозадачной настройкой вы не задавали все свои точки входа.
Основные опции генерации: Через эти опции вы генерируете main
функционируйте, если это не существует в вашем коде. При проверке модулей или библиотек, вы используете эти опции.
Вы не задавали все функции что сгенерированный main
должен вызвать.
Входные параметры и блокирующие опции: Через эти опции вы ограничиваете переменные диапазоны снаружи своего кода или силы, блокирующей из функций.
Возможные ошибки в спецификации включают:
Вы указали переменные диапазоны, которые являются слишком узким вызывающим в противном случае достижимым кодом, чтобы стать недостижимыми.
Вы заблокировали некоторые функции непреднамеренно.
Макросы: Через эти опции вы задаете или не задаете макросы препроцессора.
Вам придется явным образом задать макрос, который ваш компилятор рассматривает неявно, как задано.
Проверяйте свои опции в предыдущий порядок. Если ваши технические требования являются неправильными, фиксируют их.
main
Функция не завершает работуЭта причина применяется только для многозадачного кода, когда целые функции точки входа не проверяются.
Если вы конфигурируете многозадачные опции вручную, необходимо следовать за ограничениями на модель многозадачности Polyspace. В частности, main
функция не должна содержать бесконечный цикл или ошибку времени выполнения. В противном случае функции точки входа не проверяются.
Например, в этом примере, task2
не проверяется, даже если вы задаете его как точку входа. Причиной является бесконечный цикл в main
функция.
void performTask1Cycle(void); void performTask2Cycle(void); void main() { while(1) { performTask1Cycle(); } } void task2() { while(1) { performTask2Cycle(); } }
Вы видите while
ключевое слово в main
функция подчеркнута в пунктирном красном. Подсказка указывает, что цикл не может завершить работу.
Аналогично, если ошибка времени выполнения происходит, продвижение вызова функции к ошибке времени выполнения подчеркнуто в пунктирном красном с сопроводительной подсказкой.
main
ФункцияЗафиксируйте причину почему main
функция не завершает работу.
Если причиной является определенная ошибка времени выполнения (красная проверка), зафиксируйте ошибку.
Если причиной является бесконечный цикл, смотрите, почему цикл должен быть бесконечным.
Если бесконечный цикл в main
функция представляет циклическую задачу, отключите main
функционируйте и переместите бесконечный цикл в другую функцию точки входа. Можно внести это изменение только в целях анализа Polyspace, на самом деле не изменяя main
функция. Смотрите Анализ Многозадачности Polyspace Конфигурирования Вручную.