Выполните один или несколько из следующих шагов до тех пор, пока вы не определите исправление для проверки Non-terminating call. Существует несколько способов исправить проверку. Для получения описания примеров проверки и кода смотрите Non-terminating call
.
Общий рабочий процесс проверки проверки см. в разделе Результаты интерпретации Code Prover в интерфейсе пользователя Polyspace Desktop.
Проверка красного 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
.Если вызов функции не содержит аргументов, идентифицируйте, что отличается между различными вызовами функции. Посмотрите, можно ли связать источник этого различия с оранжевой проверкой в теле функции.
Например, если функция читает глобальную переменную, различные вызовы функции могут работать с различными значениями глобальной переменной. Определите, содержит ли тело функции оранжевую проверку, связанную с глобальной переменной.