Идентифицируйте вызов функции с ошибкой времени выполнения

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

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

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

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

  1. Запустите анализ на этом коде и откройте результаты.

    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 проверки на / операция.

  2. Укажите, что вы хотите хранить индивидуальную информацию о контексте вызова для функции func.

    1. В строение проекта выберите узел Precision.

    2. Выберите custom для Sensitivity context.

    3. Щелкните, чтобы добавить новое поле. Введите func.

  3. Запустите верификацию и откройте результаты.

    Оранжевая проверка Division by zero все еще появляется в теле func. Однако этот оранжевый чек отмечен на панели Results List как темно-оранжевый чек и обозначается знаком. Вместо красной проверки Non-terminating call на втором вызове появляется штриховая красная линия func.

  4. Выберите оранжевый чек.

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

См. также

Похожие примеры

Подробнее о