Интегрированная интерактивная  среда   разработки   программ  Borland Pascal  (IDE)  включает  в себя ряд средств,  облегчающих разработку программ: автоматическое управление проектами, средств   обеспечения модульной  структуры программы,  быструю компиляцию и простые в использовании оверлеи.  Но несмотря  на  все  это  ваша программа все  равно  может содержать ошибки,  что не позволит ей корректно работать.


IDE для DOS Borland Pascal предоставляет вам  инструментальные средства  для отладки программ,  то есть поиска и исправления ошибок. В этой главе описываются инструментальные средства и процедуры отладки программы в интегрированной среде, включая следующие темы:
* обзор ошибок и методов отладки;
* управление выполнением программы;
* проверка значений;
* остановки выполнения программы.

Данная глава посвящена встроенному отладчику  IDE  для  DOS.  Все описанные  процедуры применимы также к Турбо отладчику (Turbo Debugger) и Турбо отладчику для Windows,  хотя имена меню и нажимаемые клавиши в них могут отличаться.

Что такое отладка?

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

Какие существуют виды ошибок?

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

  Ошибки этапа компиляции

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

Компилятор, работающий в режиме командной строки, также дает вам некоторую информацию. Когда он находит синтаксическую ошибку, то выводит содержащую ошибку строку с номером этой строки и сообщением об ошибке.

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

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

  Ошибки этапа выполнения

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

Когда программа  Borland  Pascal  обнаруживает такую ошибку,  она завершает выполнение и выводит сообщение следующего вида:

  Run-time error ## at seg:ofs

Если вы выполняете программу из IDE,  Borland Pascal автоматически находит вызвавший ошибку оператор (как в случае синтаксических ошибок). Если вы выполняете программу вне IDE, то вы можете запустить  IDE и,  чтобы найти вызвавший ошибку оператор,  использовать команду SearchіFind Error, которая дает вам адрес сегмента и  смещения  (seg:ofs).  Если вы используете компилятор командной строки, то можете для поиска ошибки использовать параметр  /F.

  Логические ошибки

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

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

Методы отладки

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

В данном разделе описываются различные возможности отладки в

  IDE для DOS Borland Pascal.

Выполнение по шагам и трассировка

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

   Остановка выполнения

Существует два способа сообщить IDE, что программу нужно выполнить до определенной точки, а затем остановить. Первый и простейший способ состоит в том, чтобы найти позицию в программе, где вы хотите  остановиться,  затем  выбрать в меню Run команду Go to Cursor (Выполнение до позиции курсора). Ваша программа выполняется как обычно,  пока не достигнет оператора, где она должна остановиться. В этой точке вы можете проверить значения и  продолжать выполнение непрерывно или по шагам.

Второй способ состоит в том, чтобы остановить в определенной заданной точке вашу программу.  Эта точка называется точкой останова. Когда  вы  выполняете программу,  она останавливается перед выполнением оператора в точке останова.  Точки останова - это более гибкий механизм, чем использование метода выполнения до позиции курсора (Go to Cursor), поскольку в программе вы можете установить несколько точек останова.

   Отслеживание и модификация

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

Кроме того,  чтобы показать вывод программы,  встроенный отладчик позволяет вам просматривать значения переменных, выражений и структур  данных.  С помощью команды Wathes в меню Debug в окне просмотра Watches вы можете добавлять или  удалять  отслеживаемые  элементы. В этом диалоговом окне вы можете проверять переменные и выражения и изменять значения любых переменных,  включая  строки, указатели,  элементы  массива  и поля записей,  что позволяет вам проверять реакцию программы на различные условия.

  Поиск

Если вам нужно найти  в  программе  описания  процедуры  или функции, либо определения объекта,  это легко можно сделать с помощью средства просмотра объектов ObjectBrowser.  С помощью  меню Search и выбора команд Objects,  Globals, Units или Symbols выберите соответствующее окно просмотра. См. Главу 4 ("Программирование в интегрированной среде для DOS"), где о просмотре кода рассказывается более подробно.

Генерация отладочной информации

Перед отладкой  программы вам нужно указать компьютеру,  что нужно сообщить компилятору на необходимость  генерации  некоторой  дополнительной информации,  благодаря  которой он сможет отслеживать, какие строки исходного кода соответствуют отдельным  частям выполняемой программы.  Эта  дополнительная информация называется отладочной информацией. Вы можете включить эту информации, выбрав соответствующий   параметр   (кнопку   с  независимой  фиксацией) диалогового окна Compiler Options интегрированной среды  (команда OptionsіCompiler) или включив в код программы соответствующую директиву компилятора.

Когда вы компилируете программу Borland  Pascal,  компилятор всегда сохраняет список используемых идентификаторов, который называется таблицей идентификаторов.  В этом  списке  отслеживаются имена всех переменных,  констант,  типов, процедур и функций. Для целей отладки там сохраняются также номера строк исходных файлов, где встречаются все эти идентификаторы.  Выбрав в диалоговом окне Compiler Options параметр Debug Information (Отладочная  информация) или задав директиву компилятора $D+,  вы указываете компилятору, что в таблицу идентификаторов нужно добавить  информацию  о номерах строк.

Встроенная и автономная отладка

В диалоговом  окне  параметров  отладчика  Debugger  Options (OptionsіDebugger) вы можете сообщить компилятору, нужно ли генерировать отладочную  информацию для использования встроенного или автономного отладчика (такого как Turbo Debugger), или для обоих.

Если вы хотите использовать встроенный отладчик, то нужно выбрать параметр Integrated (который устанавливается по умолчанию).

   Информация в модулях

Если вы пишете большую программу, которая использует модули, и отладочная  информация  получается слишком объемной,  вы можете сократить объем этой информации для отдельных модулей,  используя в них  директиву  компилятора  $L-  или отменив в диалоговом окне Compiler Options параметр Local Symbols (Информация  о  локальных идентификаторах).

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

Управление выполнением

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

- выполнять инструкции по шагам;

- трассировать инструкции;

- выполнять программу до заданной точки;

- находить определенную точку;

- выполнять сброс программы.

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

Что такое шаг?

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

Все выполнение  в  отладчике,  включая выполнение  по шагам, трассировку и останов, основывается на строках. Подсвечивая стро-ку, встроенный отладчик всегда сообщает вам,  какую строку вы выполняете следующей (строка выполнения).  Строка выполнения  выводится цветом,  отличным от нормального цвета.  Благодаря этому вы можете легко видеть, где находитесь.

Выполнение программы по шагам

Выполнение по шагам - это простейший способ выполнения программы по элементарным фрагментам. Выбор команды RunіStep Over или нажатие клавиши  F8  вызывает  выполнение отладчиком всего кода в операторе, указанном строкой выполнения, включая любые вызываемые на ней процедуры или функции, пока управление не вернется обратно к вам. После этого строка выполнения указывает следующий выполняемый оператор.

Возьмем, например, следующий пример программы:

program StepTest;


function Negate(X: Integer): Integer;

begin

Negate := -X;

end;


var

I: Integer;

begin

for I := 1 to 10 do Writeln(Negate(I));

end.

Пример 6.1 Простая программа, выполняемая по шагам.

Если в окне редактирования вы выведите  StepTest  и  нажмете клавишу F8, то строка выполнения перемещается на оператор begin в начале основного цикла,  поскольку это первое,  что выполняется в  программе. Второе нажатие клавиши F8 выполняет begin и перемещает строку выполнения вниз до оператора for на следующей строке. После этого нажатие F8 вызывает выполнение всего цикла for; на экран пользователя выводятся числа от -1 до -10,  а  строка  выполнения перемещается к end.

Хотя функция Negate вызывается 10 раз, строка выполнения никогда на нее не перемещается.  Выполнение по шагам позволяет  отладчику не  показывать детали любых вызовов для отдельной строки. Выполнение по шагам вызывает выполнение всего  цикла  for  сразу, поэтому вы  не  сможете видеть изменения в ходе выполнения цикла.  Если вы хотите видеть подробности цикла, внесите в пример следующее простое изменение.

begin

for I := 1 to 10 do

   Writeln(Negate(I));

end.

Пример 6.2 Изменение формата кода для лучшего выполнения  по шагам.

Поскольку оператор  Паскаля  может занимать несколько строк, такая программа будет в точности эквивалентна предыдущей  версии, а генерируемый код будет идентичен. Но поскольку оператор Writeln теперь находится на отдельной строке,  отладчик может интерпретировать его  отдельно.  Если теперь вы будете нажимать клавишу F8,  то увидите,  что строка выполнения будет при выполнении цикла  10  раз возвращаться на Writeln.

Трассировка программы

Трассировка программы во многом аналогичная ее выполнению по  шагам. Единственное исключение состоит в том,  что когда встречается оператор вызова процедуры или функции,  при трассировке  эти процедуры и функции также выполняются по шагам, а при простом выполнении по шагам управление возвращается  вам  после  завершения выполнения подпрограммы.

Например, чтобы  выполнить  трассировку  кода в Примере 6.1,  загрузите файл, затем выберите команду RunіTrace Into или нажмите  клавишу F7. Когда вы в первый раз делаете это, управление перемещается на оператор begin основной программы. Повторное нажатие F7 снова перемещает  строку управления на оператор for.  После этого нажатие клавиши F7 трассирует вызов функции Negate -  строка  выполнения перемещается на оператор begin в блоке функции.  Если вы  продолжаете нажимать F7,  строка выполнения перемещается по функции,  а затем,  когда вы дойдете до оператора end, возвращается к  оператору вызова.

Формат вашей программы влияет на поведение строки выполнения  при трассировке,  хотя и не в такой степени как при пошаговом выполнении. Если код сформатирован как в Примере 6.1, то трассировка оператора for приводит к выполнению 10 раз функции Negate. Если вы разобъете оператор for на две строки, как в Примере 6.2, то трассировка оператора end функции возвращает строку выполнения ту  строку основной программы,  которая будет выполняться  следующей. Первые девять  раз  это снова будет вызов функции.  В десятый раз строка выполнения перемещается на оператор end программы.

Трассировка или выполнение по шагам?

Пошаговое выполнение  или трассировка выполняет одно и то же действие, кроме того случая,  когда строка  выполнения  находится под строкой вызова процедуры или функции, или когда вы выполняете оператор begin в начале программы или модуля,  который использует   другие модули.

Выполнение begin в блоке begin..end основной программы вызывает код инициализации для любого используемого в программе модуля в том порядке, который указывается в операторе uses программы.  Аналогично,  выполнение оператора begin в начале секции инициализации вызывает код инициализации для любых модулей,  используемых  в данном модуле.  Выполнение по шагам и  трассировка  работает  в  этих случаях как и можно ожидать - пошаговое выполнение begin выполняет всю инициализацию, возвращая управление на следующий оператор только после того, как все будет завершено; при трассировке  выполняется трассировка кода инициализации.

Примечание: О модулях и их секциях инициализации рассказывается в Главе 7 "Модули Borland Pascal".

   Пошаговое выполнение и трассировка методов объектов

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

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

Если вы выполняете в программе компоновку с  внешним  кодом,  используя для этого директиву компилятора {$L имя_файла}, то если компонуемый файл .OBJ содержит отладочную информацию,  вы  можете трассировать этот код или выполнять его по шагам.  Borland Pascal ничего не  знает об отлаживаемом вами коде в этих модулях,  но он  будет показывать вам соответствующие строки в исходном коде.

Примечание: Требования к внешнему  коду  поясняются  в   Главе 25 "Руководства по языку".

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

Выполнение больших фрагментов

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

Чтобы задать в программе точку,  до которой вы хотите ее выполнить, а  затем  остановиться,  используйте  команду  RunіGo To Cursor (ВыполнениеіВыполнение до курсора) или клавишу  F4.  (Этим вы сообщите  отладчику,  что не хотите выполнять программу по шагам, пока не достигнете заданной точки.) Позиционируйте курсор на той строке,  где вы хотите возобновить управление отладкой, затем  нажмите клавишу F4.  Заметим, что вы можете сделать это как в начале сеанса отладки, так и когда уже выполните часть программы по шагам или протрассируете.

Поиск нужного места

IDE предусматривает два способа поиска в программе заданного места. Простейший способ предоставляет команда Find Procedure меню Search. Команда Find Procedure (Поиск процедуры) запрашивает у вас имя процедуры  или  функции,  затем  находит  соответствующую строку в  файле,  где определяется эта подпрограмма.  Этот подход  полезно использовать при редактировании,  но его можно комбинировать с  возможностью  выполнения программы до определенной точки,  чтобы пройти программу до той части кода, которую вы хотите отладить.

Возврат

Иногда в ходе отладки полезно узнать, как вы попали в данную часть кода. Окно Call Stack (Стек вызова) показывает вам последовательность вызовов процедур или функций, которые привели к текущему состоянию (глубиной до 128 уровней).  Для вывода  окна  CallStack используйте команду DebugіCall Stack.

Окно Call Stack особенно полезно использовать,  если вы случайно начали трассировку кода,  который хотели  бы  выполнить  за один шаг.  В стеке вызовов вы можете найти тот вызов, который начали трассировать по ошибке, затем выбрать команду Run to Cursor, чтобы выполнить за один шаг остальную часть вызова.

Повторное выполнение

В ходе сеанса отладки иногда желательно начать все  сначала.  Выберите команду  RunіReset  Program или нажмите клавиши Ctrl+F2.  Это приведет к полному сбросу,  так что выполнение по шагам,  или трассировка начнется в начале основной программы.

Отслеживание вывода программы

При выполнении программы по шагам часто полезно  просмотреть вывод программы,  называемый  экраном пользователя.  В прикладной  программе Windows это достаточно просто,  так как  программа  уже  выполняется в  отдельном окне.  Однако в DOS это не так легко. К счастью, Borland  Pascal  предоставляет  вам  несколько  способов просмотра экрана пользователя.

Переключение экранов

В любой момент сеанса отладки вы можете выполнять переключение экрана IDE и экрана пользователя. Чтобы вывести экран пользователя, нажмите клавиши Alt+F5.  Чтобы вернуться в  IDE,  нажмите любую клавишу или щелкните "мышью".

При выполнении  программы  отладчик  также может переключать  экраны автоматически.  Управлять характером переключения  экранов вы можете с помощью параметров Display Swapping (Переключение экрана) диалогового окна Debugger.  По умолчанию задано эффективное переключение.  Это  означает,  что  экран  пользователя выводится только в том случае, если выполняемый оператор выводит информацию на  экран  или вызывает процедуру (даже если эта процедура ничего на экран не выводит). После завершения вывода экран переключается обратно в IDE.

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

Окно Output

IDE для DOS предусматривает для  экрана  пользователя  окно, которое называется  окном  вывода.  Выбрав  команду  меню  Debugі Output, вы можете открыть (вывести на  переднем  плане)  активное окно,  содержащее  вывод  программы.  Настроить размер этого окна можно аналогично окну редактирования.

Использование двух мониторов

IDE предоставляет  вам  возможность  использования для целей отладки второго монитора.  Этот монитор должен  быть  монохромным дисплеем (поскольку использует память, отличную от цветного дисплея), и вам нужно будет запустить IDE с параметром /D. В режиме с двумя мониторами экран IDE выводится на монохромном экране, вывод вашей программы - на цветном экране,  а переключение  экранов  не выполняется.

Просмотр значений

Выполнение программы по шагам или ее трассировка  могут  помочь вам найти ошибки в алгоритме программы, но обычно желательно также знать,  что происходит на каждом шаге со значениями отдельных переменных.  Например, при выполнении по шагам цикла for  полезно знать значение переменной цикла.  IDE Borland Pascal  имеет два инструментальных средства для проверки содержимого переменных программы: окно Watches (Просмотр) и диалоговое окно Evaluate and  Modify (Вычисление и модификация).

Что такое выражение?

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

  Элементы выражений отладчика  Таблица 6.1

  ЪДВДДДДДДДДДДДї

  і Элемент выражения  і   Допустимые значения  і

  ГДЕДДДДДДДДДДДґ

  і Константы і Все допустимые типы: Boolean, Byte,і

  і  і Char, перечислимый   тип,  Integer,і

  і  і Longint,  Real,  Shortint,  Word  иі

  і  і строковый тип.   і

  ГДЕДДДДДДДДДДДґ

  і Переменные   і Все  типы, включая типы, определен-і

  і  і ные пользователям.  і

  і  і   і

  і целочисленный тип  і Любое целочисленное выражение с пе-і

  і  і ременными границами диапазона.  і

  і  і   і

  і тип с плавающей точкойі Любые выражения с плавающей  точкойі

  і  і или целочисленные выражения; лишниеі

  і  і значащие цифры отбрасываются.   і

  і  і   і

  і символьный тип  і Любое символьное выражение, включаяі

  і  і печатаемые символы  в одинарных ка-і

  і  і вычках,  целочисленные   выражения,і

  і  і тип которых приведен к типу Char, иі

  і  і контанты ASCII (#xx).  і

  і  і   і

  і булевский тип   і True, False и все булевские выраже-і

  і  і ния. і

  і  і   і

  і перечислимый тип   і Любые совместимые перечислимые кон-і

  і  і станты или целочисленные  выраженияі

  і  і в  рамках  диапазона,  тип  которыхі

  і  і приведен к совместимому  перечисли-і

  і  і мому типу. і

  і  і   і

  і указатель і Любые совместимые указатели или вы-і

  і  і ражения с приведенными к ним  типа-і

  і  і ми;  функция  Ptr с соответствующимі

  і  і параметрами.  і

  і  і   і

  і строковый тип   і Любая строковая  константа (текст ві

  і  і одинарных кавычках);  строковые пе-і

  і  і ременные; строковые выражения, сос-і

  і  і тоящие из конкатенированных строко-і

  і  і вых констант и переменных.   і

  і  і   і

  і множество і Любая множественная  константа; лю-і

  і  і бое выражение,  совместимое  с мно-і

  і  і жественным типа,  в котором исполь-і

  і  і зуются операции +, - и *. і

  ГДЕДДДДДДДДДДДґ

  і Приведение типа і Соблюдаются   стандартные   правилаі

  і  і Паскаля.   і

  ГДЕДДДДДДДДДДДґ

  і Операции  і Все операции Borland Pascal. і

  ГДЕДДДДДДДДДДДґ

  і Встроенные функции і Все функции, допустимые в выражени-і

  і  і ях-константах.   і

  ГДЕДДДДДДДДДДДґ

  і Массивы   і Массивы Borland Pascal - Mem, MemL,і

  і  і MemW.   і

  АДБДДДДДДДДДДДЩ

Просмотр выражений

Если вы хотите отслеживать значение переменной или выражения при выполнении  программы по шагам,  то можете открыть окно просмотра Watches. Это окно IDE показывает переменные и их значения в каждый конкретный момент.

Чтобы открыть  окно Watches,  выберите команду WindowіWatch. IDE открывает активное окно Watches без активных записей. Если вы выберите переменную  для  просмотра,  IDE автоматически открывает окно Watches (если вы этого еще не сделали).

Добавление просматриваемого выражения

Чтобы добавить в окно Watches переменную,  выберите  команду DebugіWatchіAdd Watch  или  нажмите  клавиши  Ctrl+F7.  Если окно Watches является активным окном,  вы  можете  добавить  выражение просмотра, нажав клавишу Ins. Отладчик открывает диалоговое окно,  запрашивающее у вас тип просматриваемого выражения.  По умолчанию выражением считается  слово  в позиции курсора в текущем окне редактирования. Просматриваемые выражения,  которые вы  отслеживали ранее, сохраняются в списке протокола.

Отслеживание текущего просматриваемого выражения

Последнее добавленное  или  модифицированное просматриваемое выражение является текущим  просматриваемым  выражением,  которое указывается выводимым  слева от него символом жирной левой точки. Если окно Watches активно,  вы можете также удалить текущее выражение, нажав клавишу Del или Ctrl+Y. Чтобы удалить все просматриваемые выражения,   выберите   команду   DebugіWatchіRemove   All  Watches.

  Редактирование просматриваемых выражений

Чтобы отредактировать просматриваемое выражение, нужно дважды щелкнуть на этом выражении "мышью" или сделать  это  выражение текущим, затем  нажать  клавишу  Enter или выбрать команду Debugі WatchіEdit Watch. Отладчик открывает диалоговое окно, аналогичное тому, которое  используется для добавления просматриваемого выражения, которое позволяет вам отредактировать  текущее  выражение.  При выборе командной кнопки OK или нажатии клавиши Enter отредактированное выражение заменяет оригинал.

  Форматирование просматриваемых выражений

Окно Watches позволяет вам несколькими способами  форматировать просматриваемые выражения, добавляя запятую и один или более спецификаторов формата. Например, хотя целочисленные значения выводятся обычно в десятичном виде, указав после него, H, вы можете задать вывод выражения в  шестнадцатиричном  формате.  Допустимые спецификаторы формата и их действие перечисляются в Таблице 6.2.

Спецификаторы формата в выражениях отладчика

  і  Символ   і Тип, на который  і   Функция і

  і  і он влияет  і  і

  ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДЕДґ

  і  $, H или X  і целочисленные типы  і Шестнадцатиричный.  Выво-і

  і  і   і дит целочисленные  значе-і

  і  і   і ния в префиксом $,  вклю-і

  і  і   і чая те, которые содержат-і

  і  і   і ся в структуре данных.   і

  ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДЕДґ

  і  C  і Char, строковые  і Символьный.  Выводит спе-і

  і  і типы і циальные  символы для ко-і

  і  і   і дов ASCII 0..31. По умол-і

  і  і   і чанию такие символы выво-і

  і  і   і дятся  в  виде   значенийі

  і  і   і #xx.   і

  ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДЕДґ

  і D   і целочисленные і Десятичный. Выводят цело-і

  і  і типы і численные  значения в де-і

  і  і   і сятичном виде (включаяі

  і  і   і те,  которые содержатся ві

  і  і   і структурах данных).   і

  ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДЕДґ

  і Fn  і с плавающей точкой  і С плавающей точкой. Выво-і

  і  і   і дит n значащих цифр,  гдеі

  і  і   і n лежит в диапазоне 2..18і

  і  і   і (по умолчанию - 11).  і

  ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДЕДґ

  і nM  і все  і Дамп  памяти.  Выводит  nі

  і  і   і байт памяти,   начиная  сі

  і  і   і адреса,  указываемого вы-і

  і  і   і ражением. Если n не зада-і

  і  і   і но,  то по умолчанию  оноі

  і  і   і равно  значению размера ві

  і  і   і байтах типа переменной.  і

  ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДЕДґ

  і P   і указатели  і Указатель. Выводит указа-і

  і  і   і тели по  адресу сегм:смещі

  і  і   і (на  не   Ptr(сегм:смещ),і

  і  і   і как это делается по умол-і

  і  і   і чанию. і

  ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДЕДґ

  і R   і записи, объекты  і Запись. Выводит имена по-і

  і  і   і лей, например,   (X:1;і

  і  і   і Y:10; Z:5) вместо (1, 10,і

  і  і   і 5). і

  ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДЕДґ

  і S   і Char, строки  і Строки.  Выводит  символыі

  і  і   і ASCII 0..31  в  виде #xx.і

  і  і   і Использует только для мо-і

  і  і   і дификации  дампов  памятиі

  і  і   і (см. выше nM).  і

  АДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДБДЩ

 

Вычисление и модификация

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

   Вычисление выражений

Чтобы вычислить выражение,  выберите команду DebugіEvaluate/ Modify или  нажмите клавиши Ctrl+F4.  Отладчик выводит диалоговое окно Evaluate and Modify (Вычисление и модификация). По умолчанию слово в  позиции  курсора в текущем окне редактирования выводится подсвеченным в поле Expression (Выражение).  Вы можете отредактировать это выражение, набрать другое выражение или выбрать вычисляемое вами ранее выражение из списка протокола.

Когда вы нажимаете Enter или щелкаете "мышью"  на  командной кнопке Evaluate, текущее значение выражения в поле Expression показывается в поле Result.

Допустимые выражения для вычисления подчиняются тем же  правилам, что и выражения для сравнения.  Для вывода результатов вычисления выражения действую спецификаторы формата,  перечисленные в Таблице 6.2.

  Модификация переменных

Во время  отладки  с  помощью  диалогового окна Evaluate and Modify вы можете изменить значение переменной. Введите переменную  в поле Expression, затем в поле New Value наберите новое значение.

При изменении  значений переменных следует иметь в виду следующее:

* Вы можете изменять только отдельные переменные или элементы массивов или записей, но не сами массивы и записи.

* Выражения  в  поле  New Value должны отвечать ограничениям  для выражений, перечисленных в Таблице 6.1.

* Выражение в поле New Value (Новое значение) должно  в  результате вычисления давать результат, совместимый по присваиванию с переменной,  которой вы  хотите  ее  присвоить. Здесь  можно  руководствоваться  следующим правилом:  если присваивание дает при компиляции ошибку, то оно не является допустимым значением модификации.

Использование точек останова

Borland Pascal дает вам  возможность  устанавливать  в  свое программе для целей отладки точки останова.  Точка останова - это обозначенная в коде программы позиция,  в которой вы хотите прекратить выполнение  программы  и  вернуть выполнение отладчику.  В этом смысле точка останова  работает  аналогично  команде  Go  to Cursor, при которой программа выполняется обычным путем до достижения определенной точки. Основное различие состоит в том, что вы можете задать несколько точке останова и точки останова,  которые будут срабатывать не при каждом их достижении.

Задание точек останова

Чтобы установить в своем в своем коде точку останова,  переместите курсор на той строке,  где вы хотите остановиться. Строка должна содержать  выполняемый  код  и не может быть комментарием, описанием или пустой строкой.  Выбор команды Toggle Breakpoint  в локальном меню окна редактирования или нажатие клавиш Ctrl+F8 устанавливает на строке точку останова,  которая обозначается подсветкой всей строки.

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

Отмена точке останова

Чтобы отменить точку останова,  поместите курсор на содержащую ее строку и выберите в локальном меню окна редактирования команду Toggle Breakpoint или нажмите клавиши Ctrl+F8.

Модификация точек останова

В процессе сеанса отладки IDE отслеживает все точки  останова. Вместо  того,  чтобы  шарить по исходному коду в поиске точек останова, она обслуживать точки останова в одном диалоговом  окне Breakpoints. Для вывода диалогового окна Breakpoints выберите команду ViewіBreakpoints. В этом диалоговом окне вы можете устанавливать, удалять, редактировать и просматривать свои точки останова.

Командные кнопки диалогового окна Breakpoints работают  следующим образом:

* Чтобы  добавить  новую  точку останова,  подсветите пустую строку в списке и выберите командную кнопку Edit.

* Чтобы отменить точку останова,  подсветите ее  и  выберите кнопку Clear.

* Чтобы модифицировать существующую точку останова,  подсветите ее и выберите командную кнопку Edit.

* Чтобы найти в своем исходном коде точку останова,  подсветите ее и выберите кнопку View.

* Чтобы удалить все точки останова, выберите командную кнопку Clear All.

Создание условный точек останова

Точки останова,  добавленные командой Toggle Breakpoint, являются безусловными: когда вы попадаете на эту строку, отладчик в любом случае останавливает программу.  Если вы редактируете новую или существующую точку останова, то у вас есть две дополнительные возможности -  с  помощью  параметров   диалогового   окна   Edit Breakpoint вы можете создать условные точки останова. В этих точках останова вы можете задать два вида условий:  счетчик проходов и логические условия.

   Подсчет числа проходов

Задание для точки останова счетчика проходов сообщает отладчику, что останавливать программу нужно не при каждом  достижении точки останова,  а только на n-ый раз. То есть, если счетчик проходов равен 3,  то отладчик останавливает  программу  только  при  третьем достижении данной точки останова.

  Проверка условий

В качестве условия для точки останова можно также задать выражение типа Boolean.  Например, вы можете проверить, попадает ли  переменная в заданный диапазон, или установлен ли некоторый флаг. В таких условиях для точек останова вы можете задавать любые  булевские выражения, подчиняющиеся правилам Таблицы 6.1.

Прерывание программы без точек останова

Даже если вы не установите точек останова, то все равно сможете выйти  в  отладчик при выполнении программы из IDE.  В любой  момент работа программы нажмите клавиши Ctrl+Break.  Отладчик находит позицию в исходном коде, где вы прервали программу. Как и в случае обычно точки останова вы можете затем выполнить  программу по шагам, трассировать ее, отследить или вычислить выражения.