Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Козак Н.В. Лекции Основы создания программ в Си...doc
Скачиваний:
24
Добавлен:
23.09.2019
Размер:
2.24 Mб
Скачать

Элементы отладки

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

Контрольные точки

Программа, запущенная под управлением интегрированного отладчика, ис­полняется как обычно, т.е. с полной скоростью, пока не будет встречена кон­трольная точка (breakpoint). Тогда отладчик приостанавливает программу, и вы можете исследовать и изменять содержимое переменных, исполнять опе­раторы в пошаговом режиме и т.д.

Контрольные точки в C++Builder могут быть четырех видов: в исходном коде, на адресе, на данных и точки загрузки модуля. Мы рассмотрим только наиболее употребительные — в исходном коде.

Контрольные точки в исходном коде

Это самый распространенный вид контрольных точек. Точка представляет собой маркер, установленный на некоторой строке исходного кода. Когда управление достигает этой строки, программа приостанавливается.

Проще всего установить контрольную точку такого типа прямо в редакторе кода, щелкнув кнопкой мыши на пробельном поле редактора (слева от текста) рядом со строкой, на которой требуется приостановить программу.

Контрольные точки могут быть также условными, со счетчиком проходов или комбинированного типа.

Контрольные точки данных

Контрольная точка на данных вызывает остановку программы, если в указанный элемент данных производится запись. Можно указать либо адрес, либо имя переменной. Можно указать также размер объекта, определяющий диапазон адресов, обращение к которым будет вызывать остановку. Для переменных встроенных типов размер устанавливается автоматически.

Как и в предыдущем случае, для контрольных точек данных можно задать условие и счетчик.

Наблюдение за переменными

Итак, вы остановили программу в контрольной точке. Обычно затем смотрят, каковы значения тех или иных переменных. Это называется наблюдением переменных (watching variables).

В отладчике имеется специальное окно списка наблюдаемых переменных. Его можно открыть командой View | Debug Windows | Watches и ввести в него любое число переменных.

Проще всего добавить переменную в список наблюдения можно, поместив курсор редактора кода на ее имя и выбрав в контекстном меню редактора Add Watch at Cursor. В окне наблюдений будет показано имя переменной и ее текущее значение либо сообщение, показывающее, что переменная в данный момент недоступна или наблюдение отключено (<disabled>). Можно ввести в список и целое выражение, если выделить его в редакторе и вызвать контекстное меню. Альтернативным методом добавления переменных или выражений является выбор в контекстном меню окна наблюдений пункта Add Watch... (пункт Edit Watch... служит для редактирования свойств уже имеющегося в списке наблюдения). Будет открыт диалог, позволяющий задать, помимо выражения, которое будет наблюдаться, также и формат представления его значения.

Помимо окна Watch, показывающего значения явно заданных переменных, в отладчиках, как правило, имеется окно, автоматически отображающее все локальные переменные и параметры текущей функции (окно Local Variables).

Пошаговое исполнение кода

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

Отладчик имеет две основных команды, позволяющие исполнять операторы программы по одному, с остановкой после каждого оператора. Это Step Over и Trace Into. Эти команды могут выполняться из главного меню Run или с помощью кнопок инструментальной панели.

Step Over (F8)

Команда Step Over выполняет оператор, на котором приостановлено выполнение, и останавливается на следующем по порядку операторе. Текущий оператор выделяется в редакторе кода синим фоном и помечается зеленой стрелкой в пробельном поле. Если текущий оператор содержит вызов функции, она выполняется без остановок, и текущим становится первый оператор, следующий за возвратом из функции. Step Over «перешагивает» через вызов функции.

Trace Into (F7)

Команда Trace Into эквивалентна Step Over в случае, когда текущий оператор не содержит вызовов функций. Если же оператор вызывает некоторую функцию, то отладчик по команде Trace Into переходит на строку ее заголовка (заголовок при желании тоже можно рассматривать как исполняемый оператор, ответственный за инициализацию локальных переменных-параметров). При следующей команде (все равно — Step Over или Trace Into) текущим станет первый исполняемый оператор тела функции. Trace Into «входит внутрь» функции.

Run Until Return (Shift+F8)

Команда Run Until Return в известном смысле дополняет предыдущую. Когда дальнейшее пошаговое исполнение функции (в которую мы вошли командой Trace Into) нецелесообразно, данная команда позволяет быстро выйти из ' нее. Применение команды Run в данном случае привело бы к «прогону» программы, после выхода из функции, до следующей контрольной точки или до завершения. Команда Run Until Return останавливает программу на операторе, следующем за оператором вызова функции.

Часть 2. Объектно-ориентированное программирование на С++