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