|
Разнообразие отладочных средств является залогом успеха при: отладке программ. Однако программисту редко удается обойтись стандартными средствами отладки и избежать создания своих собственных средств. В работе [9] дается описание большого числа программ, часть из которых может использоваться для целей: отладки. Наиболее эффективными представляются такие средства отладки, которые вводятся в программу при ее написании. В этом случае места расположения ошибок могут определяться программистом с большей точностью.
Существует несколько типов отладочных средств, применяемых при программировании:
1. Распечатывание содержимого памяти.
2. Отслеживание хода выполнения алгоритма.
3. Отслеживание обращений к переменным.
4. Отслеживание обращений к подпрограммам.
5. Проверка индексов.
6. Воспроизведение значений переменных.
Вывод содержимого памяти на печать предполагает регистрацию текущего состояния программы в некоторый момент ее выполнения. Обычно такая распечатка осуществляется на машинном языке и по целому ряду причин имеет ограниченное применение. Главная из этих причин — трудность сравнения распечатки с исходной программой, поскольку от программиста требуется понимание машинного языка и умение сопоставлять записи на этом языке с записями на языке высокого уровня. В том случае, если компилятор оптимизирует исходную программу, дело еще более осложняется, даже несмотря на знание программистом машинного языка. Компиляторы с высокой степенью оптимизации могут производить настолько серьезные перегруппировки операторов внутри программы, что распечатка ее на машинном языке почти не приносит пользы. Поскольку информация, содержащаяся в распечатке, дается не в той форме, которая нужна для ее практического использования, наблюдается тенденция к созданию отладочных средств, которые выдают отладочную информацию в более удобном виде. Обсуждение различных типов распечаток содержится в книге Гейнеса [4].
Отслеживание хода выполнения алгоритма представляет собой регистрацию логического пути выполнения программы. Она может быть использована для проверки правильности выполнения последовательности операций, заданной программистом, и текущих значений переменных. Обычно различают три вида такого слежения:
для контроля передач управления в программе, для контроля значений переменных и для регистрации вызовов подпрограмм. В первом случае на печать выдаются метки выполняемых операторов, во втором случае — метки изменяющихся переменных и их новые значения. Третий вид слежения оказывается особенно полезным при отладке программ, в которых имеется много обращений к подпрограммам. При каждом обращении выдается на печать имя подпрограммы, а при выходе из нее — сообщение о возврате в основную программу.
Часто этот вид контроля полностью обеспечивает программиста информацией, необходимой для обнаружения программной ошибки. Недостатками являются связанный с этим большой расход машинного времени, а также то, что иногда количество выдаваемой информации может исчисляться тысячами строк. Достаточно подробное отслеживание может увеличить время выполнения программы в 10—40 раз.
Для преодоления указанных недостатков средства контроля логики программы обычно проектируют так, чтобы их можно было подключать и отключать в определенных точках программы для проверки только нужных частей.
Средства отслеживания обращений к переменным разрабатываются с таким расчетом, чтобы печатались не все переменные подряд, а только указанные в конкретном списке.
Для языка АЛГОЛ XV имеется возможность получать весьма сложные контрольные записи нескольких разновидностей:
1. Постпечать (распечатку, выдаваемую по окончании работы программы) значений всех используемых в программе переменных, если происходит аварийный останов; в противном случае выдачи на печать не производится.
2. То же, что в первом случае, плюс подсчет частоты использования каждого оператора.
3. То же, что во втором случае, плюс покомандное слежение за изменением значений переменных.
4. То же, что в третьем случае, плюс регистрация каждой вызываемой переменной.
Кроме того, по запросу можно получить контрольную запись работы программной логики и последовательности передач управления. Возможно установление верхнего ограничения на число регистрируемых случаев вызова того или иного оператора. Если, например, верхней границей является число четыре, то слежение за обращениями к операторам будет прекращено после четырехкратной регистрации. Постпечать может показаться на первый взгляд непримечательным средством, однако на самом деле любая выдаваемая на печать отладочная информация представляется на входном языке: все переменные выдаются под теми же именами и в тех же форматах, которые предусмотрены в описаниях; ответвлениям программы присваиваются соответствующие программ- I ные метки, а в ходе работы программы выполняемые операторы 1
и связанные с ними переменные обозначаются в распечатках име- 1
нами, присвоенными им в исходной программе. |
Проверка индексов предназначена для контроля за правиль- I ностью индексации именованных массивов посредством сопостав- I ления их индексов с объявленными границами массива. Если гра- 1
ницы оказываются нарушенными, печатается сообщение об ошиб- I ке. Обычно имеется возможность контроля как всех массивов, так 1
и заданного их множества. 1
Воспроизведение значений переменных осуществляется посред- J ством отладочной команды DtSPLAY. Последняя позволяет поль- 1
зователю указывать конкретное место в программе, в котором не- 1
обходимо выдавать на печать значение конкретной переменной. 1
При таком способе выдачи на печать удается производить эту one- I рацию в большей степени избирательно, чем при отслеживании 1
обращений к переменным. Кроме того, по указанной команде |
обычно печатают имя переменной и ее текущее значение, что обес- |
печивает полноту выдаваемой информации. ]
Языки КОБОЛ и ПЛ/1 обладают мощными средствами выяв- 1 ления ошибок, позволяющими программисту контролировать ариф- 1 метические ошибки (деление на нуль, переполнение, потеря значимости и т. п.), признаки конца файлов и прочие условия. Так, в языке КОБОЛ есть команда USE, а в ФОРТРАНе —команда ON SIZE ERROR, благодаря которым возможен программный контроль весьма серьезных ошибок. ФОРТРАН, используемый в вычислительных системах фирмы IBM, имеет расширенные возможности работы над ошибками. В программном обеспечении машины PDP-11 фирмы Digital Equipment для этой цели предусмотрены высокоэффективные стандартные программы на языке БЕЙСИК-ПЛЮС. Аналогичные средства имеются и в ряде других компиляторов. !
Используйте доступные средства отладки.
⇐4.27. Двумерность программ || Оглавление || 4.29. Отладка в интерактивном режиме⇒
|