1.3.6. Пункт Debug (установки отладчика)

We use cookies. Read the Privacy and Cookie Policy

В меню Debug представлено семь пунктов (рис. 1.23).

Рис. 1.23

- 36 -

Часть из этих пунктов управляет «поведением» компилятора, другие позволяют проводить определенные действия во время отладки. Два пункта работают при определенных обстоятельствах: пункт Call Stack используется только во время отладки, а пункт Find Procedure доступен только после того, как программа откомпилирована.

1.3.6.1. Оценка значений переменных Evaluate (Ctrl+F4). Во время отладки эта команда позволяет просмотреть значения переменных и выражений в программе, не обращаясь к окну Watch. При этом можно не только просмотреть значение переменной, но и задать новое, чтобы проследить, как изменится дальнейший ход программы.

После этой команды на экране появляется окно, содержащее три горизонтальных поля (рис. 1.24).

Рис. 1.24

В поле Evaluate вводится имя переменной или выражение, значение которого нужно посмотреть. Находясь в редакторе, можно подвести курсор к нужному имени переменной или к началу выражения в тексте и нажать Ctrl+F4. Если вслед за этим сразу нажать стрелку курсора вправо, то можно расширить взятую в окно Evaluate строку текста.

После нажатия клавиши ввода в поле Result появляется их текущее значение. Просмотр можно задавать в любом формате: десятичном, шестнадцатеричном, символьном и т.д. Делается это следующим образом: после имени переменной ставится запятая, а затем символ спецификации формата или их сочетание. Например, пусть объявлена константа

CONST

dec : Array [1..10] of Integer =

(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);

Задав в окне Evaluate строку

Dec

- 37 -

в окне Result получим

(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)

а задав строку по-другому:

dec[2], 4H

в окне Result получим значения

$14, $1Е, $28, $32.

Такой формат результата получен, так как был задан показ четырех значений массива dec в шестнадцатеричном формате, начиная со второго элемента. Приведем таблицу символов спецификации и их функций (табл. 1.2).

После получения значения переменной в окне Result можно нажать два раза клавишу управления курсором «вниз» или клавиши TAB, в поле New — набрать новое ее значение, а затем продолжать проводить отладку командами Trace Into, Step Over или Go To Cursor.

Таблица 1.2

Спецификация формата

Функция

$

Шестнадцатеричное значение. Имеет такое же действие, как спецификатор формата H

C

Символ. Задает специальный символ для управляющих символов (значения кода ASCII от 0 до 31). По умолчанию такие символы выводятся их номерами в таблице кода ASCII в виде #xx. Влияет на все символы и строки

D

Десятичное значение. Все целые значения выводятся на экран в десятичном виде. Влияет на простые выражения целого типа, а также на структуры (массивы и записи), содержащие целые значения

H

Шестнадцатеричное значение. Все целые значения будут выводиться в шестнадцатеричном виде с предшествующим символом $. Влияет на простые выражения целого типа, а также на структуры (массивы и записи), содержащие целые значения

- 38 -

R

Запись. Выводит на экран имена полей записи, например (x:1;y:10;z:5) вместо (1, 10, 5). Влияет только на переменные типа 'запись'

X

Шестнадцатеричное значение. Действует так же, как спецификатор формата H

Fn

Выражение с плавающей запятой, где n – это целое значение от 2 до 18, задающее число выводимых на экран значащих цифр; по умолчанию это значение равно 11. Влияет только на значения в формате с плавающей точкой

P

Указатель. Выводит указатели в формате 'сегмент:смещение', а не в принятом по умолчанию формате Ptr(seg,ofs). Например, на экран выводится 3ЕА0:0020 вместо Ptr($3EA0,$20). Влияет только на значения типа 'указатель'

S

Строки. Показывает управляющие символы кода ASCII (коды от 0 до 31) в виде значений кода ASCII. При этом используется синтаксис #хх. Поскольку этот формат принят по умолчанию, использовать спецификатор S полезно только в сочетании со спецификатором M

M

Память. Выводит на экран содержимое ячеек памяти переменной. Выражение должно представлять собой конструкцию, которую допускается использовать в левой части оператора присваивания (т.е. конструкцию, обозначающую адрес памяти). В противном случае спецификатор М игнорируется. По умолчанию каждый байт переменной показывается в виде двух шестнадцатеричных цифр. Добавление спецификатора формата D приводит к тому, что байты будут выводиться в десятичном представлении, а добавление спецификаторов H, $ и X задает вывод байтов в шестнадцатеричном виде с предшествующим символом $. Спецификаторы формата C или S приводят к тому, что переменная будет выводиться в виде строки (со специальными символами или без них). По умолчанию число выводимых байтов соответствует размеру переменной, но для точного задания числа выводимых байтов можно использовать счетчик повторения

- 39 -

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

2*5 или 12 DIV 8,

и в поле Result появится ответ: 10 или 1, соответственно.

1.3.6.2. Просмотр состояния стека Call Stack (Ctrl+F3). В любой момент отладки программы эта команда показывает список процедур и функций, получивших управление на данный момент. Например, в теле основной программы команда Call Stack показывает пустой список. С помощью этой команды можно узнать также, каким путем программа дошла до выполнения этой процедуры или функции, не пользуясь командами Step Over и Trace Into.

1.3.6.3. Команда нахождения процедуры Find Procedure. Эта команда является удобным средством для нахождения любой процедуры или функции в тексте программы. Работает она (только после того, как программа откомпилирована) следующим образом: выбор этой команды вызывает появление на экране окна ввода, озаглавленного «Enter subprogram symbol» (введите имя подпрограммы). Если в этом окне набрать имя процедуры или функции, то редактор немедленно покажет на экране ее начало.

Очень удобно использовать команду Find Procedure для проведения корректировки программы во внешнем файле (подключаемой к основной программе директивой {$I Имяфайла} или находящейся в составе модуля). Необходимый файл тут же загружается в редактор, и Турбо Паскаль показывает начало процедуры.

1.3.6.4. Опция установки отладчика Integrated Debugging. Эта опция имеет два состояния — On и Off (по умолчанию — On). В этом случае доступны абсолютно все возможности встроенного отладчика: можно устанавливать точки останова и проходить программу по строкам. Переключение опции в состояние Off отключает отладчик.

1.3.6.5. Генерация кода для автономного отладчика Stand-Alone Debugging. Эта опция имеет два состояния — On и Off (по умолчанию — Off). Ее включают в состояние On в том случае, если нужно воспользоваться внешним отладчиком Turbo Debugger, разработанным фирмой Borland International. Эта опция имеет смысл только при компиляции на диск. При этом Турбо Паскаль включает всю необходимую информацию прямо в ЕХЕ-файл.

Turbo Debugger может понадобиться, если разрабатывается какой-нибудь большой пакет программ, который не в состоянии рабо-

- 40 -

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

1.3.6.6. Опция режимов переключения экрана Display Swapping. Эта опция позволяет указывать среде программирования, как управлять во время отладки экраном, на котором отображается результат работы программы. Она имеет три состояния: None, Smart и Always. По умолчанию установлен Smart, т.е. Турбо Паскаль переключается на выходной экран только, когда необходимо выполнить оператор вывода на экран, а затем переключается обратно. Это очень удобно для большинства отладок. Если установлен режим Always, то система в любом случае переключает на короткое время экран после выполнения очередной строки. Если же установлен режим None, то выходной экран будет накладываться прямо на экран среды Турбо Паскаль. Это лучшее состояние опции, если программа не имеет вывода на экран. Если же все-таки вывод на экран есть, то картинка, представленная средой программирования, может быть разрушена. В связи с этим в пункт Debug включена еще одна команда.

1.3.6.7. Команда регенерации изображения Refresh Display. Эта команда восстанавливает экран среды программирования. Для исполнения этой команды набирается следующая последовательность клавиш: Alt+D и затем R. Другим способом правильное изображение восстановить невозможно.