exponenta event banner

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

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

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

Красная проверка вызова без завершения при вызове функции указывает на одно из следующих значений:

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

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

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

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

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

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

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

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

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

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

    Дополнительные сведения см. в разделе Sensitivity context (-context-sensitivity).

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

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

Шаг 2: Поиск общих причин проверки

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

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

    В следующем примере в теле 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.

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

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