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

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

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

Проверка красного Non-terminating call при вызове функции указывает на одно из следующего:

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

  • Функция не возвращается к своему контексту вызова по другим причинам. Для примера цикл в теле функции не заканчивается.

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

Определите первопричину проверки в теле функции. В Polyspace можно выполнить следующие шаги® только пользовательский интерфейс.

  1. Перейдите к определению функции.

    Щелкните правой кнопкой мыши вызов функции, содержащий красный чек. Выберите Go To Definition, если опция существует.

  2. В теле функции определите, существует ли цикл, где условие завершения никогда не удовлетворяется.

    Возможное исправление: Измените код или аргументы функции так, чтобы условие завершения было удовлетворено.

  3. В противном случае в теле функции идентифицируйте, какая оранжевая проверка вызвала красную проверку Non-terminating call при вызове функции.

    Если вы не можете найти оранжевую проверку путем проверки, повторите верификацию с помощью Sensitivity context опции анализа. Укажите имя функции в качестве аргумента опции. Программа помечает оранжевый чек, вызывая красный Non-terminating call чек как темно-оранжевый чек.

    Для получения дополнительной информации смотрите Sensitivity context (-context-sensitivity).

    Учебное руководство по использованию опции смотрите в Идентифицируйте Вызов Функции с Ошибкой времени выполнения.

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

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

Чтобы проследить проверку Non-terminating call при вызове функции до оранжевой проверки в теле функции, попробуйте следующее:

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

    В следующем примере - в теле func, поиск всех образцов arg1 и arg2. Щелкните правой кнопкой мыши имя переменной и выберите Search For All References.

    void func(int arg1, double arg2) {
      . 
      .
    }
     
    void main() {
      int valInt1,valInt2;
      double valDouble1, valDouble2;
      . 
      .
      func(valInt1, valDouble1);
      func(valInt2, valDouble2);
    }
    Потому что valInt1 и valDouble1 не вызывайте отказа операции в func, отказ может быть вызван valInt2 или valDouble2. Потому что valInt2 и valDouble2 копируются в arg1 и arg2оранжевая проверка должна происходить в операции, связанной с arg1 или arg2.

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

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