Найти в Дзене

Метод отладочной печати

Эта статья для самых-самых начинающих, так что профессионалы могут не тратить своё время на прочтение ))) Очень редко программа работает с первого раза. Опытные программисты обычно довольно быстро находят ошибки и исправляют их. Но даже с бывалыми иногда происходит так, что приходится повозиться, чтобы найти проблемный участок в коде. Здесь у каждого свои способы, но довольно часто (я, во всяком случае) применяют так называемый “метод отладочной печати”, когда добавление команд вывода данных в ключевых точках кода помогает понять, где “что-то пошло не так”. Этот метод иногда называют “метод WRITE”, потому что он появился во времена, когда большинство программ писались на языке Фортран, где вывод на экран выполняется с помощью команды WRITE (хотя и в Паскале это делается также, но Паскаль появился позже Фортрана). Мы же приведём пример “дефектной” программы на С++: Программа считывает вводимые пользователем числа до тех пор, пока не будет введено отрицательное число. Затем вычисляется с

Эта статья для самых-самых начинающих, так что профессионалы могут не тратить своё время на прочтение )))

Очень редко программа работает с первого раза. Опытные программисты обычно довольно быстро находят ошибки и исправляют их. Но даже с бывалыми иногда происходит так, что приходится повозиться, чтобы найти проблемный участок в коде. Здесь у каждого свои способы, но довольно часто (я, во всяком случае) применяют так называемый “метод отладочной печати”, когда добавление команд вывода данных в ключевых точках кода помогает понять, где “что-то пошло не так”.

Этот метод иногда называют “метод WRITE”, потому что он появился во времена, когда большинство программ писались на языке Фортран, где вывод на экран выполняется с помощью команды WRITE (хотя и в Паскале это делается также, но Паскаль появился позже Фортрана).

Мы же приведём пример “дефектной” программы на С++:

Программа считывает вводимые пользователем числа до тех пор, пока не будет введено отрицательное число. Затем вычисляется среднее значение введённых чисел. Однако программа не работает и выдаёт такое сообщение:

-2

из которого обычный пользователь ничего не поймёт. Мало что поймёт и начинающий программист. Опытный же сразу обратит внимание на то, что переменная nNums нигде не изменяется, то есть остаётся равной 0. И ошибка вызвана делением на ноль.

Однако что делать новичку, как понять, в каком месте кода таится неприятность? Ведь компилятор не выдаёт никаких сообщений, потому что с точки зрения синтаксиса всё правильно и ошибка возникает во время выполнения программы.

А вот здесь нам как раз и поможет метод отладочной печати.

Эта программа простая, и здесь сразу можно понять, что дело в делении на 0. Но представьте, что переменная nNums была бы объявлена на 1000 строк выше или вообще в какой-нибудь библиотеке, и могла изменять значения по ходу выполнения программы. Тогда всё было бы уже не так просто. Но если мы в цикл введём строку отладочной печати:

cout << "nNums = " << nNums << endl;

то при выполнении программы мы увидим, что переменная nNums не изменяется, то есть всегда равна нулю:

-3

И когда приходит время вычислять среднее значение, то мы делим число на ноль, что и приводит к ошибке.

Однако это ещё не все возможные неприятности. Поскольку переменная nSum у нас не инициализирована, то результат может быть неверным. Предлагаю новичкам самостоятельно разобраться с этой возможной ошибкой.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.