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

Сабуров С.В. - Язык программирования C и C++ - 2006

.pdf
Скачиваний:
312
Добавлен:
13.08.2013
Размер:
1.42 Mб
Скачать

Отладчик Turbo Debugger

при отладке программ Windows NT используйте клавишу

F12;

при отладке программ DOS используйте клавиши

Ctrl+Break.

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

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

Обратное выполнение

Каждую выполненную инструкцию Turbo Debugger регистрирует в протоколе выполнения (при трассировки программы). С помощью окна протокола выполнения Execution History вы можете просмотреть выполненные инструкции и вернуться в нужную точку программы. Команда обратного выполнения Reverse Execute выполняется по клавишам Alt+F4. Turbo Debugger может регистрировать около 400 инструкций. Здесь действуют следующие правила:

Регистрируются только те инструкции, которые выполнены с помощью команды Trace Into (F7) или Instruction Trace (Alt+F7). Однако, если не выполняются отдельные инструкции (перечисленные ниже), то регистрируются также команды Step Over.

Инструкция INT приводит к стиранию протокола выполнения. Если вы не трассируете прерывание с помощью Alt+F7, то об ратное выполнение этой инструкции невозможно.

После выполнения команды Run или выполнения после прерывания протокол удаляется. (Регистрация начинается после возобновления трассировки.)

267

Отладчик Turbo Debugger

При выполнении вызова функции без ее трассировки обратное выполнение за инструкцию после возврата невозможно.

Обратное выполнение инструкций работы с портами невозможно (отменить чтение и запись нельзя).

Невозможно также обратное выполнение вызываемого программой кода Windows (если только вы не находитесь в окне CPU и не отлаживаете DLL).

В окне CPU обратное выполнение доступно всегда, а для обратного выполнения исходного кода нужно установить Full History в On (в меню Execution History). Меню Execution History

содержит также команды Inspect и Reverse Execute. Команда Inspect переводит вас к команде, подсвеченной в области Instruction. Если это строка исходного кода, она выводится в окне Module. При отсутствии исходного кода открывается окно CPU и подсвечивается инструкция в области Code. Действие инструкций IN, INSB, INSW, OUT, OUTSB, OUTSW отменить невозможно, поэтому их обратное выполнение может давать побочные эффекты.

TD.EXE имеет в окне Execution History дополнительную область, позволяющую вам вернуться в нужную точку программы при случайной потере протокола. Область Keystroke Recording в нижней части этого окна активизируется при разрешении регистрации нажатий клавиш (это можно сделать с помощью TDINST или параметра k командной строки).

Область Keystroke Recording показывает причину передачи управления отладчику (например, точка останова) и текущий адрес программы с соответствующей строкой исходного кода или машинной инструкцией. Turbo Debugger регистрирует все нажимаемые вами клавиши и записывает их в файл XXXX.TDK, где XXXX — это имя отлаживаемой программы. Локальное меню этой области содержит команды Inspect и Keystroke Restore. По команде Inspect отладчик активизирует окно Model или CPU, в котором курсор позиционирован на ту строку, где нажата клавиша. Команда Keystroke Restore перезагружает программу и выполняет ее до строки, подсвеченной в области Keystroke Recording.

268

Отладчик Turbo Debugger

Завершение программы

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

При выполнении программы в отладчике легко случайно пропустить нужное место. В этом случае вы можете возобновить сеанс отладки с помощью команды Run Program Reset (Ctrl+F2), которая перезагружает программу с диска. Перезагрузка программы не влияет на точки останова и параметры просмотра.

Выход из отладчика

Завершить сеанс отладки и вернуться в администратор программ Windows вы можете в любое время (за исключением передачи управления в программу или работы с диалоговым окном) с помощью клавиш Alt+X. Можно также выбрать команду

File Quit.

Интерфейс отладчика

Среда Turbo Debugger включает в себя набор меню, диалоговых окон и специальных окон отладчика.

Работа с меню

Команды глобальных меню Turbo Debugger выводятся в верхней части экрана в строке меню. Если вы не находитесь в диалоговом окне, то эти команды всегда доступны. Чтобы открыть меню Turbo Debugger, нажмите F10, с помощью стрелок переместитесь в нужному пункту и нажмите Enter. После F10 для перехода к нужному пункту можно также нажать его подсвеченную букву, либо сразу нажмите Alt+буква (без F10). Системное меню выбирается по Alt+пробел. Меню открывается также щелчком «мышью» на соответствующем пункте.

Окна Turbo Debugger

Для вывода информации об отлаживаемой программе в Turbo Debugger используется набор окон. Для облегчения отладки служат команды управления окнами, которые находятся в меню Window и System. Каждое открываемое окно имеет номер, указанный в его правом верхнем углу. Нажатием клавиши Alt в

269

Отладчик Turbo Debugger

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

Клавиша F6 (или команда Window Next) позволяет циклически перемещаться по открытым на экране окнам. Окно может иметь несколько областей. Для перемещения между областями используйте клавиши Tab или Shift+Tab, либо Window Next. Курсор в областях перемещается с помощью стандартных клавиш перемещения курсора.

При открытии нового окна оно выводится в месте текущего расположения курсора. Переместить его в другое место можно с помощью команды Window Size/Move и клавиш стрелок, либо сразу нажмите Shift и сдвигайте окно стрелками. Для быстрого увеличения или уменьшения окна выберите Window Zoom (F5) или щелкните «мышью» на кнопке минимизации/максимизации в верхнем правом углу окна.

Если вы по ошибке закрыли окно, вернуться в последнее окно можно с помощью команды Window Undo Close (Alt+F6). Когда программа затирает своим выводом экран операционной среды (при выключенном переключении экрана), вы можете очистить его с помощью System Repaint Desktop. Для возврата к используемой по умолчанию схемы окон Turbo Debugger выберите System Restore Standard.

Каждое окно Turbo Debugger имеет специальное оперативное меню SpeedMenu, содержащее команды, относящиеся к данному окну. Области окон также могут иметь свои меню. Для доступа к SpeedMenu активного окна или области вы можете нажать в окне правую кнопку «мыши», либо нажать клавиши Alt+F10, либо нажать Ctrl и подсвеченную букву команды SpeedMenu (для этого должно быть разрешено действие команд сокращений).

Окна меню View

Меню View является точкой входа в большинство окон Turbo Debugger. Перечислим их кратко. С помощью команды View

270

Отладчик Turbo Debugger

Another вы можете дублировать на экране окна Dump, File и Module.

Окно Breakpoints

Используется для установки, модификации или удаления точек останова. Точка останова определяет то место в программе, где отладчик приостанавливает выполнение программы. Это окно имеет две области. Справа перечислены условия и действия точек останова, слева — все точки останова.

Окно Stack

Показывает текущее состояние программного стека. Первая вызванная функция показывается в нижней части окна, а выше ее — каждая последующая. Подсвечивая эти функции и нажимая Ctrl+I вы можете проверять исходный код. Кроме того, можно открыть окно Variables и вывести все локальные переменные и аргументы функции (Ctrl+L).

Окно Log

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

Окно Watches

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

Окно Variables

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

271

Отладчик Turbo Debugger

Окно Module

Одно из важнейших окон Turbo Debugger, показывающее исходный код отлаживаемого программного модуля (включая DLL). Модуль должен компилироваться с отладочной информацией.

Окно File

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

Окно CPU

Выводит текущее состояние процессора. Окно имеет 6 областей, где выводятся дизассемблированные инструкции, селекторы Windows (только в TDW), шестнадцатеричные данные, стек в шестнадцатеричном виде, регистры ЦП и флаги процессора. Это окно полезно использовать при отладке программ на ассемблере или просмотре точно последовательности инструкций.

Окно Dump

Выводит в шестнадцатеричном виде содержимое любой области памяти (аналогично области окна CPU). Команды SpeedMenu этого окна позволяют вам модифицировать данные и работать с блоками памяти.

Окно Registers

Показывает содержимое регистров (в области регистров) и флагов ЦП (в области флагов). С помощью команд SpeedMenu вы можете изменить их значения.

Окно Numeric Processor

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

Окно Execution History

Выводит последние выполненные машинные инструкции или исходные строки программы, номер строки исходного кода и

272

Отладчик Turbo Debugger

следующую выполняемую инструкцию или строку кода. Используется для обратного выполнения.

Окно Hierarchy

Выводит на экран дерево иерархии всех используемых текущим модулем классов. Имеет область списка классов и дерева иерархии. Это окно показывает взаимосвязь используемых в модуле классов.

Окно Windows Messages

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

Окно Clipboard

Буфер Clipboard отладчика используется для для вырезания и вставки элементов из одного окна отладчика в другое. Оно показывает вырезанные элементы и их типы. Скопированные в буфер элементы динамически обновляются.

Окна Inspector

Выводят текущее содержимое выбранной переменной. Его можно открыть с помощью команды Data Inspect или Inspect меню SpeedMenu. Закрывается оно обычно по Esc или щелчком «мышью» на блоке закрытия. При последовательном открытии нескольких окон Inspector нажатием Alt+F3 или командой Window Close вы можете закрыть сразу все эти окна. Окна Inspector выводят простые скалярные величины, указатели, массивы, объединения, структуры, классы и объекты. Выбором команды Inspect в этом окне вы можете создать дополнительные окна

Inspector.

Экран пользователя

Экран пользователя показывает полный экран вывода вашей программы. Этот экран имеет такой же вид, как при выполнении программы без Turbo Debugger. Чтобы переключиться в этот экран, выберите команду Window User Screen. Для возврата в экран отладчика нажмите любую клавишу.

273

Отладчик Turbo Debugger

Специальные средства Turbo Debugger

Автоматическое дополнение имени

Когда в поле ввода выводится подсказка для ввода имени идентификатора, вы можете набрать часть имени, а затем нажать Ctrl+N. Turbo Debugger заполнит остальную часть имени автоматически. При этом набранная часть должна уникальным образом идентифицировать имя. Если с набранных символов не начинается ни одно из имен, то ничего не происходит. При наличии нескольких идентификаторов, соответствующих набранным вам символам, выводится список имен, из которого вы можете выбрать нужное.

Выбор по набору

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

Инкрементальное сопоставление

Это средство помогает вам находить записи в алфавитных списках. При наборе каждого символа полоса подсветки перемещается к первому элементу, начинающемуся с выбранных вами букв. Позиция курсора указывает, какую часть имени вы уже набрали. После подсветки вы можете нажать Alt+F10 или щелкнуть правой кнопкой «мыши». При этом выводится SpeedMenu, где вы можете выбрать команду, соответствующую подсвеченному элементу.

Клавиатурные макрокоманды

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

Расположенная в меню Options команда Macros выводит всплывающее меню с командами для определения клавиатурных макрокоманд и удаления ненужных: Create (Alt+=), Stop Recording (Alt+ ), Remove и Delete All. Команда Create начинает запись макрокоманды, а команда Stop Recording завершает ее (не используйте для завершения записи команду Options Macro Stop

274

Отладчик Turbo Debugger

Recording, так как она добавится к вашей макрокоманде). Delete All удаляет все текущие макрокоманды.

Работа с буфером Clipboard

Чтобы скопировать элемент в буфер Clipboard, позиционируйте на элементе курсор, нажмите клавишу Ins для его подсветки, затем нажмите клавиши Shift+F3. Чтобы вставить содержимое буфера в окно или диалоговое окно, нажмите Shift+F4. Выводится диалоговое окно Pick, содержащее список всех элементов буфера Clipboard и набор кнопок с зависимой фиксацией, позволяющих вам выполнять различным образом вставку элементов: String, Location и Contents. Это позволяет вам интерпретировать элемент, как вставляемый одним из трех способов: как строку, как адрес, или как содержимое по адресу. Категории, которые вы можете использовать для вставки элемента, зависят от его типа и назначения.

Для вставки элемента в диалоговое окно, подсветите элемент, выделите соответствующую категорию, затем нажмите клавишу Enter или активизируйте кнопку OK (для редактирования записи) или Paste (если вы хотите отредактировать запись).

Выбор команды View Clipboard выводит на экран окно Clipboard, в котором перечисляются все вырезанные элементы.

[*] Clipboard

 

 

 

 

 

Module

:

@#TCDEMO#36

nlines

 

 

Inspector

:

nlines

 

0

(0x0)

Module

:

@#TCDEMO#38

totalcharacters

 

 

Inspector

:

totalcharacters

0

(0x0)

В левом поле этого окна описывается тип записи, за которым следует двоеточие и вырезанный элемент. Если вырезанный элемент представляет собой выражение из окна Watch, переменную из окна Inspector или данные, регистр или флаг из окна CPU, то за элементом следует его значение или значения.

Address

Адрес без соответствующих данных или кода.

Control flag

Значение управляющего флага сопроцессора.

275

Отладчик Turbo Debugger

Coprocessor

Регистр арифметического сопроцессора.

CPU code

Адрес и список байт выполняемых инструкций из области кода окна CPU.

CPU data

Адрес и список байт данных в памяти из области данных в окне CPU или в окне Dump.

CPU flag

Значение флага ЦП из области флагов окна CPU.

CPU register

Имя регистра и значение из области регистров окна CPU или окна Register.

CPU stack

Исходная позиция и кадр стека из области стека окна CPU.

Expression

Выражение из окна Watches.

File

Позиция в файле (в окне File), которая не является модулем в программе.

Inspector

Одно из следующих:

имя переменной из окна Inspector;

значение константы из окна Inspector или Watch;

регистровая переменная окна Inspector;

битовое поле окна Inspector.

Module

Содержимое модуля, включая позицию в исходном коде, аналогично переменной из окна Module.

Status flag

Значение флага состояния сопроцессора.

String

Текстовая строка, например, отмеченный блок из окна File.

276

Соседние файлы в предмете Программирование на C++