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

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

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

Отладчик Turbo Debugger

Next

Ищет следующий экземпляр заданной в команде Search строки.

Origin

Позиционирует курсор на модули и строку, соответствующую текущей инструкции. Ее полезно использовать для возврата в исходное место.

Goto

Открывает окно Enter Address to Position To, в котором можете ввести любой адрес программы, который хотите просмотреть (в виде имени процедуры или в шестнадцатеричном виде). Это окно выводится также при наборе в окне Module.

Edit

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

Exceptions

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

Просмотр других файлов

Для просмотра любого файла на диске, включая двоичные и текстовые, используйте окно File. При выборе в строке меню команды View File отладчик выводит диалоговое окно Enter Name of File. Вы можете задать в нем трафаретные символы или конкретное имя файла. В зависимости от содержимого файла в открываемом окне File файлы выводятся в текстовом или шестнадцатеричном виде.

Команды окна File

Команды SpeedMenu окна File можно использовать для перемещения по файлу и изменения формата вывода.

307

Отладчик Turbo Debugger

Goto

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

Search

Ищет строку символов, начиная с текущей позиции курсора. Для ввода строки выводится окно Enter Search String. При шестнадцатеричном выводе можно задать список байт (в соответствии с используемым языком). Допускаются трафаретные символы (* и ?).

Next

Ищет следующий экземпляр строки, заданной в команде поиска.

Display As

Переключает вывод между текстовым и шестнадцатеричным форматом.

File

Позволяет сменить файл, выводимый в окне File. Окно File не дублируется. Чтобы просматривать два файла одновременно, выберите команду View Another File.

Edit

Эквивалентна соответствующей команде окна Module.

Отладка на уровне ассемблера

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

Окно CPU

Это окно открывается командой View CPU строки меню и использует различные области для описания состояния вашей программы на нижнем уровне. Его можно использовать для:

просмотра машинного кода и дизассемблированных инструкций программы;

проверки и модификации байт структур данных программы;

308

Отладчик Turbo Debugger

тестирования исправления ошибок с помощью встроенного ассемблера в области кода.

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

Для адресных ссылок вне текущего сегмента в окне CPU выводятся знаки вопроса. Клавиша Ctrl в сочетании со стрелками позволяет сдвигать вывод на 1 байт. При выполнении кода Windows, модуля без отладочной информации, остановке программы на инструкции внутри строки исходного кода или при трассировке инструкций с помощью Alt+F7 окно CPU выводится автоматически.

Область кода

В левой части области кода выводятся адреса дизассемблированных инструкций. Для 16 разрядного кода они

309

Отладчик Turbo Debugger

имеют вид «сегмент:смещение», а для 32 разрядного это 32 разрядные адреса. Стрелка (>) справа от адреса памяти указывает текущий адрес программы (следующую выполняемую инструкцию). Справа выводится шестнадцатеричный машинный код с соответствующей дизассемблированной инструкцией. Глобальные идентификаторы выводятся в виде имени, статические — в виде имени модуля с символов # и именем идентификатора, а номера строк представлены как имя модуля, # и номер строки. Клавиша F2 позволяет устанавливать/отменять точки останова.

Меню SpeedMenu области кода содержит команды, позволяющие перемещаться по ней и ассемблировать вводимые инструкции. TDW имеет дополнительную команду ввода вывода, а TD 32 — команды Threads и OS Exceptions.

Goto

Вам выводит окно Enter Address to Position To для ввода нового адреса, на который вы хотите перейти. Вы можете ввести адрес, выходящий за пределы программы, что позволяет проверить базовую систему ввода вывода (BIOS), внутренние области DOS и Windows.

Origin

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

Follow

Позиционирует область кода по целевому адресу текущей подсвеченной инструкции. Используется в сочетании с инструкциями передачи управления (CALL, JMP, INT) и условного перехода (JZ, JNE, LOOP и др.).

Caller

Позиционирует вас на инструкцию, вызвавшую текущее прерывание или подпрограмму. Если текущая подпрограмма прерывания занесла данные в стек, то Turbo Debugger может не иметь возможности определить, откуда она вызвана.

Previous

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

310

Отладчик Turbo Debugger

Search

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

PUSH

DX

POP

[DI+4]

ADD

AX,100

а попытка поиска следующих инструкций может привести к непредсказуемым результатам:

JE

123

CALL

MYFUNC

LOOP

$ 10

Вместо инструкции можно вводить также список байт.

View Source

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

Mixed

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

No (Нет) — исходный код не выводится, выводятся только дизассемблрованные инструкции.

Yes (Да) — перед первой дизассемблированной инструкцией, со ответствующей данной строке, выводится строка исходного кода. Область устанавливается в данный режим, если исходный модуль написан на языке высокого уровня.

Both (Оба) — для тех строк, которым соответствует исходный код, дизассемблированные строки заменяются строками исходного текста. В противном случае выводятся дизассемблированные инструкции. Используйте этот режим, когда вы отлаживаете модуль на

311

Отладчик Turbo Debugger

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

Thread

Позволяет выбрать нить, выполнение которой вы хотите отладить. Открывает диалоговое окно Pick a Thread, из которого вы можете выбрать конкретную нить программы.

OS Exceptions

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

New EIP

Изменяет текущий адрес программы, подсвеченный в области кода (в TDW команда называется New CS:IP). При возобновлении выполнения программы оно начинается по этому адресу. Эта команда полезна, когда нужно пропустить некоторые машинные инструкции, но использовать ее нужно аккуратно, так как она может вызвать нестабильность системы.

Assemble

Ассемблирует инструкцию, заменяя инструкцию по текущему адресу. Используется для внесения в программу минимальных изменений. Команда выводит диалоговое окно Enter Instruction to Assemble, где вы можете ввести выражение для ассемблирования. Если вы начнете набор в области кода, данная команда вызывается автоматически.

I/O

Эта команда TDW считывает или записывает значения в пространство адресов ввода вывода ЦП и позволяет вам проверить содержимое регистров ввода вывода и записать в них значения. При этом выводится меню, показанное ниже:

In byte

Ввести

байт

из

порта

Out

byte

Вывести

байт

в

порт

Read

byte

Прочитать

байт

из порта

Write byte

Записать

байт в

порт

Учтите, что эти команды могут нарушить нормальную работу устройств.

312

Отладчик Turbo Debugger

Область регистров и флагов

В области регистров (верхняя область справа от области кода) выводится содержимое регистров процессора. Вид этой области зависит от отладчика (TD32 или TDW). По умолчанию TDW выводит 13 16 разрядных регистров, а TD32 — всегда выводит 15 регистров процессора 80386 и старше.

С помощью команд SpeedMenu области регистров вы можете модифицировать или сбрасывать содержимое регистров. Команда Increment добавляет 1 к текущему подсвеченному регистру, Decrement вычитает 1 из содержимого текущего подсвеченного регистр, а Change позволяет изменить содержимое регистра, выводя диалоговое окно Enter New Value для ввода нового значения. Последняя команда вызывается автоматически, если вы начинаете набор в области регистров.

Команда Registers 32 bit, доступная только в TDW, переключает вывод регистров с 16 битовых на 32 битовые (сегментные регистры остаются 16 битовыми).

Область флагов

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

Буква в области

Название флага

c

Флаг переноса

z

Флаг нуля

s

Флаг знака

o

Флаг переполнения

p

Флаг четности

a

Флаг дополнительного переноса

i

Флаг разрешения прерывания

d

Флаг направления

SpeedMenu этой области содержит содержит команду Toggle, переключающую значение подсвеченного флага между 0 и 1.

Область дампа

В этой области выводится в шестнадцатеричном виде содержимое области памяти. В левой части каждой строки

313

Отладчик Turbo Debugger

показан адрес (в виде «сегмент:смещение» или 32 разрядного адреса). Порядок регистров в области Dump имеет вид: DS, ES, SS, CS. Справа от адреса выводятся значения элементов данных в выбранном формате.

SpeedMenu области Dump содержит команды для перемещения по области, модификации содержимого, перемещению по указателям, задания формата вывода и работы с блоками памяти.

Goto

Выводит диалоговое окно Enter Address to Position To, где вы можете ввести выражение, при вычислении которого получается адрес памяти, доступный программе.

Search

Ищет строку символов или список байт, начиная с адреса, указанного курсором.

Next

Ищет следующий экземпляр элемента, заданного в команде поиска.

Change

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

Follow

Открывает меню с командами, позволяющими проверить данные по адресам указателей near и far. TD32 содержит команды для 32 разрядной адресации.

Команда Near Code этого меню интерпретирует слово под курсором в области данных, как смещение в текущем сегменте кода (как это задается регистром CS). Область кода становится текущей областью и позиционируется на данный адрес.

Команда Far Code интерпретирует двойное слово под курсором в области данных, как адрес дальнего типа (сегмент и смещение). Область кода становится текущей и позиционируется на данный адрес.

Команда Offset to Data позволяет вам следовать по цепочке указателей размером в слово (ближнего типа, где используется

314

Отладчик Turbo Debugger

только смещение). Область данных устанавливается в соответствии со смещением, заданным словом в памяти по текущей позиции курсора.

Команда Segment:Offset to Data позволяет следовать по цепочке указателей дальнего типа размером в двойное слово (где используется сегмент и смещение). Область данных устанавливается в соответствии со смещением, заданным двойным словом в памяти по текущей позиции курсора.

Команда Base Segment:0 to Data интерпретирует слово под курсором, как адрес сегмента, и позиционирует область данных на начало сегмента.

Previous

Восстанавливает адрес области данных в адрес, который был до последней команды, явно изменившей значение текущего адреса. Использование клавиш стрелок и клавиш перемещения курсора не приводит к запоминанию позиции. Отладчик поддерживает стек из пяти последних адресов, поэтому вы можете вернуться назад после многократного (< 5) использования команд локального меню Follow или команды Goto.

Display As

Позволяет выбирать формат вывода в области данных. Вы можете выбирать один из форматов данных, использующихся в языке Си, Pascal или ассемблер. Эти форматы можно выбрать из меню. Команда Byte устанавливает область данных в режим вывода шестнадцатеричных байтовых данных. Word устанавливает область данных в режим вывода шестнадцатеричных слов. Long задает режим вывода длинных шестнадцатеричных целых чисел. Comp устанавливает режим вывода 8 байтовых целых чисел. Выводится десятичное значение числа. Float устанавливает режим вывода 6 байтовых чисел с плавающей точкой. Выводится значение числа с плавающей точкой в научном представлении. Double выводит 8 байтовые числа с плавающей точкой. Выводится значение числа в научном представлении. Extended устанавливает режим вывода 10 байтовых чисел с плавающей точкой в научном представлении.

315

Отладчик Turbo Debugger

Block

Позволяет работать с блоками памяти. Вы можете перемещать, очищать, присваивать значения блокам памяти, а также записывать и считывать блоки памяти из файлов на диске. По данной команде на экран выводится всплывающее меню. Команда Clear этого меню устанавливает непрерывный блок в памяти в значение 0. Адрес блока и число байт, которые требуется очистить, запрашиваются в выводимой подсказке. Move копирует блок памяти из одного адреса в другой. Адреса исходного и целевого блока, а также число копируемых байт, будут запрашиваться в подсказке. Set присваивает непрерывному блоку в памяти конкретное байтовое значение. Адрес блока, число байт, которым требуется присвоить значение, а также само значение запрашиваются в подсказке. Read считывает все содержимое или часть файла в блок памяти. Вам выводится подсказка для ввода имени считываемого файла, затем адреса, куда требуется считать информацию, и числа считываемых байт. Write записывает блок памяти в файл. Выводится подсказка для ввода имени файла, куда требуется записать данные, затем блока памяти, который нужно записать, и число считываемых байт.

Область стека

Эта область показывает шестнадцатеричное содержимое программного стека. Текущий указатель стека отмечается указателем >. SpeedMenu этой области содержит команды Goto, Origin, Follow, Previous и Change, аналогичные описанным выше командам.

Область селектора

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

являются ли содержимым данные или код;

загружена ли область памяти, на которую ссылается селектор (присутствует в памяти) или разгружена (выведена на диск);

316