Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Языки программирования С, С++

.pdf
Скачиваний:
136
Добавлен:
01.05.2014
Размер:
1.43 Mб
Скачать

Отладчик Turbo Debugger

Если нужно, задайте в окне Conditions and Actions нужные действия.

Действия, выполняемые по точкам останова

Кнопка с зависимой фиксацией Action в диалоговом окне Conditions and Actions позволяет задать действия, выполняемые по точке останова.

Break

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

Execute

Execute приводит к выполнению выражения (выражение запрашивается в поле ввода Action Expression). Выражение должно иметь некоторые побочные эффекты, например, присваивание значения переменной. Эта возможность позволяет вам включить выражение, которое будет выполняться перед кодом вашей программы в строке с текущим номером («вставка кода»). Такое средство полезно использовать, когда вы хотите изменить поведение подпрограммы, чтобы проверить «диагноз» или скорректировать ошибку. Это позволяет при проверке минимальных изменений в программе не выполнять цикл компиляции и компоновки.

Log

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

Enable group

Enable group позволяет вновь активизировать запрещенную ранее группу точек останова. Укажите в поле ввода Action Expression номер группы.

Disable group

Disable group позволяет запретить группу точек останова. При запрещении группы точек останова они не стираются, а

287

Отладчик Turbo Debugger

просто маскируются на время сеанса отладки. Укажите в поле ввода Action Expression номер группы.

Задание условий и действий

Для задания активизации точки останова и того, что должно при этом происходить, используется окно Conditions and Actions. Обычно для каждой конкретной точки останова задается одно условие или выражение действия. Однако отладчик позволяет задавать несколько выражений. Кроме того, с одной точкой останова можно связать несколько условий и действий.

Чтобы задать набор условий, выберите кнопку с зависимой фиксацией Changed Memory of Expression, введите в поле ввода Condition Expression условие, выберите кнопку Add под блоком ввода Condition Expression (если вводится несколько выражений, повторите эти шаги). Кнопка Delete под полем Condition Expression позволяет удалить из поля ввода Condition Expression

текущее подсвеченное выражение.

При выборе кнопки с зависимой фиксацией Execute, Log,

Enable Group или Disable Group в группе Action, нужно задать набор условий, по которым Turbo Debugger будет активизировать точку останова. Набор условий состоит из одного или более выражений. Чтобы задать их, выберите кнопку с зависимой фиксацией Execute, Enable Group или Disable Group, введите действие в поле ввода Action Expression и выберите кнопку Add под полем ввода Action Expression. Чтобы при активизации точки останова выполнять более одного выражения, повторите эти шаги. При задании нескольких условий и действий они вычисляются в порядке их ввода.

При выборе кнопки Enable Group или Disable Group для ссылки на группы точек останова, которые нужно разрешить или запретить, наберите в поле Action Expression номер группы.

Кнопка Delete под полем Action Expression позволяет удалить из набора действие текущее подсвеченное выражение. Закончив ввод действий, выберите в диалоговом окне Condition Action командную кнопку OK.

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

288

Отладчик Turbo Debugger

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

Чтобы модифицировать точку останова в другом (не загруженном в данный момент) модуле, используйте команду

View Another Module.

Группы точек останова

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

Команда Group в локальном меню окна Breakpoint активизирует диалоговое окно Edit Breakpoint Groups, с помощью которого вы можете создать или модифицировать точки останова.

[*]

Edit

Breakpoint

groups

Group

 

 

 

1

#BCDEMO#38

#BCDEMO#39

OK

3#BCDEMO#40

Help

Add... Delete Enable Disable

Группа точек останова идентифицируется положительным целым числом, которое автоматически генерируется отладчиком или назначается вами. Отладчик автоматически присваивает групповое число каждой создаваемой точке останова. Генерируемый номер группы представляет собой наименьший еще не использованный номер. Таким образом, если номера 1, 2 и 5 уже используются группами, то следующей создаваемой точке останова автоматически присваивается номер группы 3. После создания точки останова вы можете модифицировать статус ее группы с помощью команды Breakpoint Groups.

Кнопка Add окна Edit Breakpoints активизирует диалоговое окно Add Group, содержащее один блок списка и набор кнопок с зависимой фиксацией. Блок списка Module/Class выводит список модуле или классов текущей программы. Посветите нужных модуль или класс и выберите OK. Все устанавливаемые таким образом точки останова объединяются в одну группу. Кнопка

289

Отладчик Turbo Debugger

Delete удаляет подсвеченную группу, а Enable/Disable разрешают или временно запрещают данную группу.

Кнопки с зависимой фиксацией позволяют выбрать тип функций, выводимых в блоке Module/Class: кнопка Modules выбирает все модули в текущей программе, а кнопка Classes — все ее классы.

Удаление точек останова

Удалить точки останова можно с помощью локального меню (SpeedMenu) окна Breakpoints или меню Breakpoints. Команда

Remove меню окна Breakpoints или клавиша Del стирают точку останова, подсвеченную в области списка. Команда Delete All меню Breakpoint и локального меню окна Breakpoints удаляют все установленные точки останова.

Точки останова в шаблонах С++

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

Если точка останова устанавливается нажатием F2 в окне Module, то точки останова задаются для всех экземпляров классов в шаблонах. Это позволяет вам отладить поведение шаблона.

Если для установки точки останова в шаблоне используются клавиши Alt+F2, то активизируется диалоговое окно Breakpoint Options, и в поле ввода Address вы можете задать адрес шаблона. Открываемое диалоговое окно позволяет вам выбрать конкретный экземпляр класса.

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

Удаляются такие точки останова аналогично другим: позиционируйте курсор на точке останова в окне Module и нажмите F2. Удаляются все точки останова соответствующих экземпляров классов. Конкретные точки останова можно удалить с помощью окна CPU.

290

Отладчик Turbo Debugger

Установка точек останова в нитях

Программы для Windows NT состоят из одной или более выполняемых «нитей». При их отладке вы можете установить точки останова в конкретных нитях, даже если этот код совместно используется несколькими нитями. По умолчанию точка останова в программе Windows NT устанавливается во всех нитях программы. Чтобы установить ее только в одной нити, сделайте следующее:

Подсветите нужную точку останова в области списка окна Breakpoint.

Выберите команду локального меню Set Options.

Чтобы открыть диалоговое окно Conditions and Actions, щелкните «мышью» в на кнопке Change диалогового окна Breakpoint Options. Если нужно, установите для точки останова условия и действия. По умолчанию отмечается кнопка All Threads — точки останова устанавливаются во всех активных нитях.

Сбросьте установку All Threads. Становится доступным поле ввода Threads. Наберите в этом поле номер нити Windows NT. (Чтобы получить номер нити Windows NT, с помощью команды View Thread откройте диалоговое окно Thread. В области Threads List выводятся все активные нити.)

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

Окно Log

Это окно отслеживает события, происходящие во время сеанса отладки. Открывается оно по команде View Log и по умолчанию содержит до 50 строк текста (вы можете изменить это с помощью программы инсталляции).

[*]

Log

 

3

At

MCINPUT.124

 

Breakpoint

at

TCDEMO.220

Breakpoint

at

TCDEMO.220

Breakpoint

at

TCDEMO.220

We are now entering procedure Params...

Breakpoint at TCDEMO.180

291

Отладчик Turbo Debugger

В это окно записываются:

адрес программы при ее приостановке;

комментарий (при использовании команды Add Comment данного окна);

значение выражения, определенного для активизированной точки останова;

содержимое области или окна при выборе команды Edit Dump to Log;

информация о локальной и глобальной динамической распределяемой памяти или список программных модулей (при выборе команды Display Windows Info локального меню данного окна);

при установке в Yes параметра Send to Log Window окна Windows Messages в окно Log передаются все посылаемые данному окну сообщения.

Команды SpeedMenu окна Log позволяют вам записывать журнал в файл на диске, останавливать и начинать регистрацию, комментировать журнал, очищать его и записывать в него информацию о программе Windows.

Open Log File

Эта команда записывает на диск все записи, регистрируемые в окне Log. Вам выводится подсказка для ввода имени файла на диске. По умолчанию он имеет расширение

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

Close Log File

Закрывает файл, открытый с помощью команды Open Log

File.

Logging

Разрешает/запрещает запись событий в окно Log. Используется для управления регистрацией событий.

Add Comment

Позволяет включить в окно Log комментарии. Открывает диалоговое окно с подсказкой для ввода комментария.

292

Отладчик Turbo Debugger

Erase Log

Очищает окно Log. Файл журнала на диске не изменяется.

Display Windows Info

Доступна только для TDW и выводит на экран окно Windows Information. Позволяет вывести информацию о динамически распределяемой памяти и список модуля приложения.

Анализ и модификация данных

Данные вашей программы — это глобальные и локальные переменные, а также определенные константы. Для проверки и модификации данных в Turbo Debugger имеется ряд окон.

Окно Watches

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

[*]

Watches

 

 

2

wordcount unsigned int 8 (Ox8)

 

wordcounts

unsigned

int

[10]

{1,2,4,6,1,1,2,0,0,0}

lettersinfo struct linfo

[26]

 

 

{(4,2),(1,1),(0,0),(1,1),(7,0),(.

 

nlines*nwords

unsigned

int

24 (Ox22)

totalcharacters

unsigned

long

88L

(Ox42)

Это окно допускает просмотр значений как простых переменных, так и составных объектов данных (например, массивов). Элементы составных объектов выводятся в фигурных скобках ({}). Можно также отслеживать выражения, не ссылающиеся непосредственно на память. Отслеживаемые выражения перечисляются в левой части окна, соответствующие типы данных и значения — справа.

Чтобы задать отслеживаемые данные, выберите команду Data Add Watch, либо команду Watch локального меню окна Module, Variable или Watches. Turbo Debugger открывает диалоговое окно Enter Expression to Watch. Введите в нем имя переменной или выражение.

Если в окне Module курсор находится на переменной, то она автоматические добавляется в окно Watch при выборе окна

293

Отладчик Turbo Debugger

Wathes в SpeedMenu. Это же относится к выражениям, выделенными с помощью клавиш Ins и стрелок.

Если не переопределяется область действия, отладчик вычисляет выражения относительно текущего указателя команд. Если выражение содержит символ, недоступный в активной области действия, то выводятся символы ????. При вводе выражений вы можете использовать имена еще не определенных переменных, поэтому имена следует вводить аккуратно (Turbo Debugger не распознает ошибок).

При трассировке внутри функции элемента можно использовать указатель this, который можно сопровождать спецификаторами формата и квантификаторами.

Меню окна Watches

SpeedMenu окна Wathes содержит все команды, необходимые для работы с элементами окна.

Wathes

Эта команда выводит подсказку для ввода имени переменной или выражения, добавляемого в окно Watches. Если не задается область действия, оно вычисляется относительно текущей позиции курсора.

Edit

Открывает диалоговое окно Edit Watch Expression, позволяющее вам модифицировать подсвеченное в окне Wathes выражение.

Remove

Удаляет из окна Watches подcвеченный элемент.

Delete All

Удаляет из окна Watches все выражения. Ее полезно использовать при при перемещении из одной области программы в другую.

Inspect

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

294

@7129:01fA
@7129:0402
@7129:04B5
@7129:0651 1 ($1)
0 ($0)

Отладчик Turbo Debugger

Change

Модифицирует значение текущей подсвеченной в окне Wathes переменной. При вводе в диалоговом окне Enter New Value нового значения Turbo Debugger выполняет необходимое преобразование типа.

Окно Variables

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

[*] Variables 3 TCDEMO.SHORESULTS

TCDEMO.INIT

TCDEMO.PROCESSLINE

TCDEMO.PARMSONHEAP

TCDEMO.NUMLINES

TCDEMO.NUMWORDS

CH

'A

ISLETTER

True

S

'ABC DEF'

I

1 ($1)

WORDLEN

28969

Окно имеет две области. Область глобальных переменных (вверху), показывает все глобальные идентификаторы программы. Область статических/локальных переменных (внизу) показывает все статические переменные (идентификаторы) текущего модуля. В обеих областях выводится имя переменной (слева) и ее значение (справа). Если отладчик не может найти информации о типе данных идентификаторов, то он выводит четыре вопросительных знака (????).

295

Отладчик Turbo Debugger

Меню окна Variables

Каждая область окна Variables имеет собственное SpeedMenu. Оба меню содержат команды Inspect, Change и Wathes, а команда Show имеется только в области локальных идентификаторов.

Inspect

Открывает окно Inspector, где выводится содержимое подсвеченного идентификатора. В отличие от обычных окон Inspector, если вы проверяете глобальную переменную, имя которой совпадает с именем локальной переменной, то Turbo Debugger выводит значение глобальной переменной. При проверке имени функции активизируется окно Module, а курсор перемещается на имя этой функции в исходном коде (при его отсутствии выводится окно CPU).

Change

Открывает диалоговое окно Change, в котором можно изменит значение подсвеченного идентификатора.

Watch

Открывает окно Watches и добавляет в него подсвеченный идентификатор. При этом не отслеживается, глобальная это переменная или локальная. В блоке локальной переменной локальная переменная имеет старшинство.

Show

Выводит диалоговое окно Local Display. Кнопки с зависимой фиксацией этого окна позволяют разрешить или изменить область действия переменной в области локальных переменных.

Show — показывать только статические переменные.

Auto — только переменные, локальные для текущего блока.

Both — и статические, и локальные (по умолчанию).

Module — смена текущего модуля. Выводит диалоговое окно со списком модулей программы.

Переменные стека

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

296