В этом руководстве показано, как идентифицировать вызов функции, который вызывает ошибку времени выполнения в теле функции.
Если функция содержит два разных цвета на одной и той же операции для двух различных вызовов, программа объединяет контексты вызова и отображает оранжевую проверку на операции. Для примера, когда некоторые вызовы функции вызывают красную или оранжевую проверку операции в теле функции, а другие вызовы вызывают зеленую проверку, в результатах вашей верификации операция является оранжевой.
Необходимо отличить оранжевые проверки, возникающие из-за комбинации контекстов вызовов, поскольку оранжевая проверка может возникнуть из-за других причин. Используя контекст опции Sensitivity, сделайте это различие, сохраняя индивидуума контексты вызова для функции.
В этом руководстве функция вызывается дважды. Вы идентифицируете, какой вызов функции вызывает ошибку времени выполнения в теле функции.
Запустите анализ на этом коде и откройте результаты.
void func(int arg) { int loc_var = 0; loc_var = 1/arg; } void main(void) { int num = 1; func(num + 10); func(num - 1); }
При втором вызове функции Non-terminating call появляется красная проверка func
. В теле func
, есть оранжевый Division by zero проверки на /
операция.
Укажите, что вы хотите хранить индивидуальную информацию о контексте вызова для функции func
.
В строение проекта выберите узел Precision.
Выберите custom
для Sensitivity context.
Щелкните, чтобы добавить новое поле. Введите func
.
Запустите верификацию и откройте результаты.
Оранжевая проверка Division by zero все еще появляется в теле func
. Однако этот оранжевый чек отмечен на панели Results List как темно-оранжевый чек и обозначается знаком. Вместо красной проверки Non-terminating call на втором вызове появляется штриховая красная линия func
.
Выберите оранжевый чек.
На Result Details панели показаны контексты вызова для проверки. Можно увидеть, что один вызов создает красную проверку на /
операция, а другой вызов создает зеленую проверку. Можно кликнуть каждый вызов, чтобы перейти к нему в исходном коде.