4.28. Средства отладки

Разнообразие отладочных средств является залогом успеха при: отладке программ. Однако программисту редко удается обойтись стандартными средствами отладки и избежать создания своих собственных средств. В работе [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. Отладка в интерактивном режиме


Услуги