Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Отладчик Turbo Debugger



Отладчик Turbo Debugger (TD), разработанный фирмой Borland International, представляет собой оконную среду отладки программ на уровне исходного текста на языках Pascal, С, ассемблер. Он позволяет решить две главные задачи:

О определить место логической ошибки;

О определить причину логической ошибки.

Перечислим некоторые возможности TD:

О выполнение трассировки программы в прямом направлении, то есть последовательное исполнение программы, при котором за один шаг выполняется одна машинная инструкция;

О выполнение трассировки программы в обратном направлении, то есть выполнение программы по одной команде, но в обратном направлении;

О просмотр и изменение состояния аппаратных ресурсов микропроцессора во время покомандного выполнения программы.

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

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

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

листинга 3.1, именем процедуры. Имя этой метки обязательно нужно указать в конце программы в качестве операнда директивы END:

END имя_метки

В нашем случае эта метка является именем процедуры main. О Исходный модуль должен быть оттранслирован с опцией /zi:

tasm /zi имя_исходного_модуля,,,

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

О Редактирование модуля должно быть осуществлено с опцией /v:

tlink /v имя_объектного_модуля

Опция /v указывает на необходимость сохранения отладочной информации в исполняемом файле.

О Запуск отладчика удобнее производить из командной строки с указанием исполняемого модуля программы, которая подлежит отладке:

td имя_исполняемого_модуля

Кстати, сам файл отладчика td.exe логично также поместить в наш рабочий каталог WORK. Изначально файлы отладчика находятся в каталоге BIN пакета TASM. Если все же td. ехе и исполняемый модуль при запуске будут находиться в разных каталогах, то в командной строке необходимо указать путь к этому модулю, например:

td с:\tasm\work \имя_модуля.ехе

При правильном выполнении перечисленных выше действий откроется окно отладчика TD под названием Module.

В этом окне вы видите исходный текст программы prg_3_1.asm. Как он здесь оказался, ведь мы для программы td.exe указали только имя исполняемого модуля? Это как раз и есть результат действия опций /zi и /v для tasm и tlink соответственно. Их применение позволило сохранить информацию об использовавшихся в коде на ассемблере символических именах. Ради полноты эксперимента вы можете получить исполняемый модуль без задания этих опций. Проанализируйте результат. Но вернемся к окну Module. Здесь вы видите так называемый курсор выполнения (в виде треугольника). Он указывает на первую команду, подлежащую выполнению. Этой команде предшествует имя метки (в нашем случае роль метки выполняет имя процедуры). Это так называемая точка входа в программу. Если вы внимательно посмотрите конец исходного текста программы, то увидите, что это же имя записано в качестве операнда в заключительной директиве END. Это единственный способ сообщить загрузчику ОС о том, где в исходном тексте программы расположена точка входа в нее. В более сложных программах обычно вначале могут идти описания процедур, макрокоманд, и в этом случае без такого явного указания на первую исполняемую команду вам не обойтись.

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

окна. Управление работой отладчика ведется с помощью системы меню. Имеется два

типа таких меню:

О глобальное меню — находится в верхней части экрана и доступно постоянно.

Вызов меню осуществляется нажатием клавиши F10, после чего следует

выбрать нужный пункт этого меню;

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

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

Запустить программу на выполнение в отладчике можно в одном из четырех режимов:

О режим безусловного выполнения;

О выполнение по шагам;

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

О выполнение с установкой точек прерывания. Рассмотрим эти режимы подробнее.

Режим безусловного выполнения целесообразно применять, когда требуется посмотреть на общее поведение программы. Для запуска программы в этом режиме необходимо нажать клавишу F9. В точках, где необходимо ввести данные, отладчик, в соответствии с логикой работы применяемого средства ввода, будет осуществлять определенные действия. Аналогичные действия отладчик выполняет для вывода данных. Для просмотра или ввода этой информации можно открыть окно пользователя (Window|User screen)1, например, нажав клавиши Alt+F5. Если работа программы удовлетворяет вас, то на этом можно и закончить. В случае, если возникают какие-то проблемы или если нужно более

1 В скобках мы будем указывать последовательность обращения к меню для выполнения необходимой операции. Так, в этом случае необходимо выбрать в глобальном меню Window пункт User

screen.

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

Выполнение по шагам применяется для детального изучения работы программы. В этом режиме вы можете выполнить программу по командам. При этом можно наблюдать результат исполнения каждой команды. Для активизации этого режима нужно нажать клавиши F7 (RunjTrace into) или F8 (Run|Step over). Обе эти клавиши активизируют пошаговый режим; отличие их проявляется в том случае, когда в потоке команд встречаются команды перехода в процедуру или на прерывание. При использовании клавиши F7 отладчик осуществит переход на процедуру или прерывание и выполнит их по шагам. Если же используется клавиша F8, то вызов процедуры или прерывания отрабатывается как одна обычная команда и управление возвращается следующей команде программы. Здесь нужно отметить, что кроме окна Module при работе в этом режиме полезно использовать окно CPU, вызвать которое можно через глобальное меню командой View|CPU.

Это окно отражает состояние микропроцессора и состоит из 5 подокон:

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

О Registers — окна регистров микропроцессора, отражающего текущее содержимое регистров. Заметьте, что по умолчанию отображаются регистры только i8086. Для того чтобы воспользоваться всеми регистрами i486 или Pentium, нужно задать режим их отображения. Для этого щелкните правой кнопкой мыши в области подокна регистров для вызова локального меню. В меню выберите команду Registers 32-bit - Yes;

О окна флагов, которые отражает текущее состояние флагов микропроцессора в соответствии с их мнемоническими названиями;

О окна стека Stack, отражающего содержимое памяти, выделенной для стека. Адрес области стека определяется содержимым регистров SS и SP;

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

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

Некоторые из этих подокон можно использовать по-другому. Все-таки удобнее работать с исходным текстом в окне Module, чем с его дизассемблированным вариантом в окне CPU. Но в то же время нужно отслеживать и состояние микропроцессора, используя информацию из подокон окна CPU. Совместить возможности окон Module и CPU можно посредством пункта глобального меню View, в котором необходимо выбрать нужные имена подокон CPU (эти имена мы указали при перечислении подокон выше).

Отладчик Turbo Debugger 81

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

Выполнение с установкой точек прерывания позволяет выполнить программу с остановкой ее в строго определенных точках прерывания (breakpoints). Перед выполнением программы необходимо установить эти точки в программе, для чего следует перейти в нужную строку и нажать клавишу F2. Выбранные строки подсвечиваются другим цветом. Установленные ранее точки прерывания можно убрать — для этого нужно повторно выбрать нужные строки и нажать клавишу F2. После установки точек прерывания программа запускается на выполнение клавишей F9. На первой точке прерывания программа остановится. Теперь можно посмотреть состояние микропроцессора и памяти, а затем продолжить выполнение программы. Сделать это можно или в пошаговом режиме, или выполнить программу до следующей точки прерывания.

Прервать выполнение программы в любом из этих режимов можно, нажав Ctrl+F2.

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

Подведем некоторые итоги:

И Наиболее развитым и удобным для использования ассемблерным пакетом является транслятор фирмы Borland — TASM. Большое количество опций и директив управления листингом программы на ассемблере позволяют задать достаточно гибкую обработку исходного кода транслируемой программы.

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

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

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

0 Целями трансляции программы являются обнаружение синтаксических ошибок и генерация объектного модуля. После того как получен корректный объектный модуль, программу необходимо скомпоновать. Для этого применяется утилита TLINK, входящая в состав пакета TASM. Одно из основных ее назначений -- разрешение внешних ссылок. Если наша целевая программа состоит из нескольких отдельно оттранслированных модулей и в них есть взаимные ссылки на переменные или модули, то TLINK разрешает их, формируя тем самым правильные перемещаемые адреса.

0 Результатом работы утилиты TLINK является исполняемый (загрузочный) модуль, имеющий расширение.ехе. Его уже можно запускать на выполнение с надеждой, что он правильно выполнит задуманные вами действия. Так, возможно, и будет, когда у вас появится достаточно опыта и знаний. Пока же чаще всего вы будете сталкиваться с ситуацией, в которой машина погружается в глубокую задумчивость, выдает на экран какую-то бессмыслицу или вовсе перезагружается. Все это говорит о том, что вам предстоит долгая работа по поиску самых вредных ошибок — логических. К счастью, в вашем распоряжении есть специальный вид программного обеспечения — отладчики. Постарайтесь уделить им достойное внимание, и вы увидите, что большинство ваших программных проблем будет снято.





Дата публикования: 2015-06-12; Прочитано: 1515 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...