Поиск и исправление ошибок

При поиске ошибок большим подспорьем является возможность пошагового выполнения (трассировки) программы с параллельным отслеживанием того, как меняются в ходе нее значения переменных. В среде Turbo Pascal для этого имеются следующие инструменты:

  • Нажатие клавиши F4 выполнит программу до той строки, на которой установлен курсор, затем приостановит выполнение.
  • Нажатие клавиши F7 или F8 позволяет выполнять программу пошагово: по одному оператору (различие между этими функциями состоит в том, производится или нет трассировка текстов подпрограмм).
  • Использование окна отладочной выдачи Debug | Watch позволяет в процессе выполнения программы следить за тем, как изменяются значения переменных (нажатие клавиши Insert добавляет в это окно новую переменную).

Более подробно эти возможности описаны в руководствах по языку и среде Turbo Pascal.

Можно дать несколько полезных советов, касающихся локализации ошибок в программе.

Совет 16. Пользуйтесь всеми доступными инструментами отладки.

Совет 17. На всех ключевых участках, а также на границах логически самостоятельных блоков вставляйте в программу отладочные операторы печати, которые позволят вам проследить изменение состояния основных переменных. Эта процедура не всегда может быть заменена просмотром изменений, который можно осуществить с помощью окна Watch. Зачастую бывает необходимо иметь перед собой для сравнения результаты нескольких последовательных итераций, либо нужно видеть одновременно первые и последние результаты, либо в процессе прогонки возвращаться по списку выдачи назад, к предыдущим результатам. Ничего этого параллельный просмотр в Watch сделать не позволяет.

Если отладочная выдача настолько объемна, что не помещается целиком на экран, ее приходится производить в файл.

Совет 18. Следите за тем, чтобы отладочная печать выдавала именно то, что нужно. Совершенно невозможно отловить ошибку в программе, если под именем проверяемой переменной вам выдается значение другой переменной!

Самый легкий случай, - когда из-за опечатки полностью меняется вид вывода. Например, правильный оператор writeln(a+1) должен выдать число, если же вместо числа на экране вдруг появляется слово FALSE, то это явный признак того, что произошла опечатка и выдается результат сравнения переменной а с единицей: writeln(a=1).

Однако не всегда удается так легко отделаться, поэтому обязательно удостоверьтесь в том, что правильной является и конечная печать результата: выдается значение нужной переменной, значение выводится в правильном формате и т.п. Такие ошибки возникают только из-за невнимательности и бывают подчас трудноуловимыми.

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

Совет 20. Пишите "заглушки" для еще не отлаженных процедур и функций. Это значит, что вместо того, чтобы мучиться одновременно с несколькими подпрограммами, вы вынуждаете большую их часть возвращать не тот результат, какой они реально вырабатывают, а тот, который они должны были бы возвращать при правильной работе.

Совет 21. За один раз исправляйте ровно одну ошибку. Нет ничего хуже, чем гадать, которое из внесенных исправлений оказало решающее влияние на поведение программы.