Идентифицируйте первопричины Code Prover Красные или оранжевые проверки

Проблема

После верификации, Polyspace® Code Prover™ подсвечивает операции в вашем коде с определенными цветами в зависимости от того, может ли операция вызвать ошибку времени выполнения. Смотрите Цвета Результата и Исходного кода Code Prover.

Это не сразу понятно, почему верификация подсвечивает определенную операцию красного цвета (определенная ошибка времени выполнения) или оранжевый (потенциальная ошибка времени выполнения). Даже если вы изучаете причину ошибки, это не сразу понятно, где зафиксировать его.

Возможная причина: отношение к предшествующим операциям кода

Часто ошибка времени выполнения в определенной операции связана с предшествующими операциями в вашем коде.

Например, операция переполняется из-за большого значения операнда, но операнд получает то значение в предыдущих операциях.

Решение

Чтобы заняться расследованиями, как предшествующая операция инициировала ошибку времени выполнения в текущей операции, сделайте следующее:

  • Просмотрите сообщение, сопоставленное результатом верификации на текущей операции.

    Сообщение появляется в панели Result Details или в подсказках на операции в панели Source. Сообщение показывает вам, как исследовать результат далее.

    Например, сообщение ниже показов, что правильный операнд может быть нулем. Чтобы определить, как переменная операнда получает нуль значения, необходимо просмотреть предыдущие операции, которые пишут в переменную.

  • Просмотрите предшествующие операции в своем коде, которые связаны с текущей операцией.

    Пользовательский интерфейс Polyspace обеспечивает функции простой навигации между отдельными моментами в вашем коде. Например, можно перейти от имени функции до функционального определения.

Идентифицируйте подходящее место в своем коде, где можно реализовать фиксацию.

Дополнительные сведения о том, как рассмотреть каждый тип проверки см. в Проверках на этапе выполнения Code Prover.

Возможная причина: предположения программного обеспечения

Если вы не предоставляете свое законченное приложение или внешнюю информацию, запрошенную для верификации, программное обеспечение должно сделать определенные предположения о недостающем коде или внешней информации.

Например, если вы не обеспечиваете main функция, программное обеспечение генерирует main это вызывает только невостребованные функции. Если func1 вызовы func2, сгенерированный main не вызывает func2 снова. Верификация проверяет на ошибки времени выполнения в func2 только от контекста вызова в func1.

Предположения таковы, что они применяются к большинству приложений. Однако в нескольких случаях, предположения по умолчанию не могут описать вашу среду выполнения точно. Если предположения не то, что вы ожидаете, результаты верификации могут быть неожиданными.

Решение

Смотрите, можно ли проследить результат верификации до предположения программного обеспечения. Для частичного списка предположений смотрите Аналитические Предположения Code Prover. Дополнительный список предположений предоставлен в codeprover_limitations.pdf в polyspaceroot\polyspace\verifier\code_prover_desktop.

Часто, можно изменить предположения по умолчанию с помощью определенных опций.

  • Цель и Компилятор: Смотрите, необходимо ли установить опцию эмулировать поведение компилятора.

    Например, если вы хотите, чтобы частные операций деления были округлены в меньшую сторону вместо окруженного, используйте опцию Division round down (-div-round-down).

  • Входные параметры и Блокирование: Смотрите, необходимо ли внешне ограничить некоторые переменные.

    Например, если вы хотите ограничить глобальную переменную в определенной области значений, используйте опцию Constraint setup (-data-range-specifications).

  • Многозадачность: Смотрите, забыли ли вы задавать некоторые задачи или механизмы защиты.

    Например, если вы хотите указать, что функция представляет nonpreemptable прерывание, используйте опцию Interrupts (-interrupts).

  • Верификация Code Prover: Если вы проверяете модуль без main, смотрите если сгенерированный main инициализирует ваши глобальные переменные и вызывает ваши функции в правильном порядке.

    Например, если вы хотите сгенерированный main чтобы вызвать все ваши функции, используйте опцию Functions to call (-main-generator-calls) с аргументом all.

  • Предположения верификации: Смотрите, подходят ли глобальные предположения верификации для вашей среды выполнения.

    Например, если вы хотите, чтобы верификация полагала, что неизвестными указателями может быть NULL- ценный, используйте опцию Consider environment pointers as unsafe (-stubbed-pointers-are-unsafe).

  • Поведение проверки: Смотрите, подходят ли технические требования проверки на этапе выполнения для вашей среды выполнения.

    Например, если вы хотите Illegally dereferenced pointer проверяйте, чтобы позволить адресную арифметику с указателями через поля структуры, использовать опцию Enable pointer arithmetic across fields (-allow-ptr-arith-on-struct).

Если вы все еще не можете изучить свой результат, свяжитесь с MathWorks® Техническая поддержка для справки с интерпретацией вашего результата. Если вы не можете совместно использовать свои фактические результаты верификации, предоставьте только определенную важную информацию о своем результате. Смотрите Техническую поддержку Контакта О Проблемах с Рабочим Polyspace.