Одним из способов отладки программы является использование утверждений. Утверждение
– это логическое условие, которое должно быть всегда истинно. Если такое условие ложно, то
значит, имеются ошибки в логике программы.
Например, в функции «sum1n» параметр «n» не должен принимать отрицательные значения.
Поскольку тип выбран неверно, то такая ситуация может возникнуть, хотя и не должна. Внедрим в
код утверждение, которое проверяет, что параметр «n» не должен принимать отрицательные
значения. Для этого подключим библиотеку «cassert» и добавим проверку условия с помощью
макроса «assert».
#include
#include
using namespace std;
int sum1n(int n)
{
assert(n >= 0);
int i, s=0;
for (i=0; i
s += i;
return s;
}
int main()
{
int sum;
sum = sum1n(-1);
cout << "sum = " << sum << endl;
return 0;
}
При выполнении такой программы пользователь увидит следующее окно:
В окне приложения сообщается, какое условие было нарушено и в каком месте программы.
Пользователю предлагается выбор:
Кнопка «Прервать» позволяет прервать выполнение программы и перейти к
редактированию исходного кода программы. 89
Кнопка «Повтор» (рекомендуется) позволяет приостановить выполнение программы
и перейти в режим пошаговой отладки.
Кнопка «Пропустить» позволяет выполнить программу дальше, не обращая
внимания на неправильные данные.
При нажатии на кнопку «Повтор» пользователь увидит следующее:
Далее необходимо нажать кнопку «Прервать» и просмотрев стек вызовов определить, в
каком месте программы произошёл сбой.
Из рисунка видно, что сбой произошёл в файле «test.exe» в функции «sum1n» в строке 7.
Указаны значения параметров функции «sum1n» («int n=-1»). Далее можно посмотреть, откуда была
вызвана эта функция. В данном случае вызов был произведён из функции «main».
Таким образом, записывая утверждения в различных частях программы, мы можем быстрее
выявить некорректное поведение и аномальные значения переменных.
Может возникнуть впечатление, что утверждения замедляют работу программы, проверяя
каждый раз условия. Это верно для программ конфигурации «Debug». Для конфигурации «Release»
утверждения не компилируются, и программа выполняется без дополнительных проверок.
|