Рассмотрите и зафиксируйте неостанавливающиеся проверки цикла

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

Для общего рабочего процесса при рассмотрении проверок смотрите, Интерпретируют Результаты Polyspace Code Prover.

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

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

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

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

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

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

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

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

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

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

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

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

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

    • Чтобы найти источник ошибки, на панели 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 с оранжевой ошибкой в теле функции.