Выполните одно или несколько из этих действий до тех пор, пока не будет определено исправление для проверки вызовов без завершения. Существует несколько способов исправления чека. Описание проверки и примеры кода см. в разделе Non-terminating call.
Общий рабочий процесс проверки проверок см. в разделе Интерпретация результатов проверки кода в пользовательском интерфейсе Polyspace Desktop.
Красная проверка вызова без завершения при вызове функции указывает на одно из следующих значений:
Сбой операции в теле функции для данного вызова. Поскольку существуют другие вызовы той же функции, которые не приводят к сбою, сбой операции обычно отображается в теле функции как проверка оранжевого цвета.
Функция не возвращается в контекст вызова по другим причинам. Например, цикл в теле функции не завершается.
Определите основную причину проверки в теле функции. В интерфейсе пользователя Polyspace ® можно выполнить только следующие действия.
Перейдите к определению функции.
Щелкните правой кнопкой мыши вызов функции, содержащий красный чек. Выберите «Перейти к определению», если опция существует.
В теле функции определите, существует ли цикл, в котором условие завершения никогда не выполняется.
Возможное исправление: Измените код или аргументы функции, чтобы условие завершения было удовлетворено.
В противном случае в теле функции определите, какая проверка оранжевого цвета вызвала красную проверку вызова без завершения при вызове функции.
Если по проверке не удается найти оранжевую проверку, повторно запустите проверку с помощью опции анализа Контекст чувствительности. Укажите имя функции в качестве аргумента опции. Программное обеспечение помечает оранжевый чек, в результате чего красный сигнал проверки вызова без завершения помечается как темно-оранжевый чек.
Дополнительные сведения см. в разделе Sensitivity context (-context-sensitivity).
Учебное пособие по использованию этой опции см. в разделе Идентификация вызова функции с ошибкой времени выполнения.
Возможное исправление: Выясните причину оранжевой проверки. Измените код или аргументы функции, чтобы избежать оранжевой проверки.
Чтобы отследить не завершающий вызов при вызове функции на оранжевую проверку в теле функции, выполните следующие действия:
Если вызов функции содержит аргументы, в теле функции выполните поиск всех экземпляров параметров функции. Проверьте, можно ли найти оранжевую проверку, связанную с параметрами. Поскольку другие вызовы той же функции не приводят к сбою операции, вероятно, что сбой связан со значениями параметров функции в красном вызове.
В следующем примере в теле 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.Если вызов функции не содержит аргументов, определите, что отличается между различными вызовами функции. Проверьте, можно ли связать источник этой разницы с оранжевой проверкой в теле функции.
Например, если функция считывает глобальную переменную, различные вызовы функции могут работать с различными значениями глобальной переменной. Определите, содержит ли тело функции оранжевую проверку, связанную с глобальной переменной.