Просмотрите и исправьте проверки без завершения цикла

Выполните один или несколько из следующих шагов до тех пор, пока вы не определите исправление для проверки Non-terminating loop. Существует несколько способов исправить проверку. Для получения описания примеров проверки и кода смотрите Non-terminating loop.

Общий рабочий процесс проверки проверки см. в разделе Результаты интерпретации Code Prover в интерфейсе пользователя Polyspace Desktop.

Шаг 1: Интерпретируйте информацию о проверке

Поместите курсор на ключевое слово цикла, такое как for или while.

Получите следующую информацию из подсказки:

  • Является ли цикл бесконечным или содержит ошибку времени выполнения.

    В следующем примере вероятно, что цикл бесконечен.

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

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

Шаг 2: Определите первопричину проверки

  • Если цикл бесконечен, определите, почему условие завершения цикла никогда не удовлетворяется.

    Если у вас в коде намеренно есть бесконечный цикл, например, для циклических приложений, можно добавить комментарий и обоснование в свой результат или код. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.

  • Если цикл содержит ошибку времени выполнения, идентифицируйте ошибку, которая вызывает проверку Non-terminating loop. Исправьте ошибку.

    В теле цикла ошибка времени выполнения обычно возникает как оранжевая проверка другого типа на операции. Чек оранжевый и не красный, потому что операция обычно проходит чек в первых нескольких итераций цикла и прекращает работать только в более поздней итерации. Однако, поскольку отказ происходит каждый раз, когда цикл запускается, Non-terminating loop проверка ключевого слова цикла является красной.

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

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

    • Перейдите к источнику ошибки в теле цикла. Щелкните правой кнопкой мыши ключевое слово цикла и выберите Go to Cause, если опция существует.

    Для получения руководства «Идентифицируйте операцию цикла с ошибкой времени выполнения».

Шаг 3: Проверьте общие причины проверки

  • Если цикл бесконечен:

    • Проверьте ваше условие завершения цикла.

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

      Для образца, если условие завершения цикла while (count1 + count2 < count3), увидеть, меняете ли вы хотя бы один из count1, count2, или count3 в цикле.

    • Если вы изменяете переменные, участвующие в условии завершения цикла, смотрите, изменяете ли вы их в правильном направлении.

      Для образца, если условие завершения цикла while(i<10) и вы уменьшаетесь i в цикле цикл не завершается. Необходимо увеличить i.

  • Если цикл содержит ошибку времени выполнения:

    • Если переменная управления циклом является индексом массива, смотрите, есть ли у вас ошибка оранжевого Out of bounds array index в теле цикла.

    • Если переменная управления циклом передается в функцию, смотрите, можно ли связать ошибку красного Non-terminating loop с оранжевой ошибкой в теле функции.