| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
Неправильный порядок операндов................................139
Программист забывает о стеке или резервирует маленький стек...139
Вызов подпрограммы, которая портит содержимое нужных
регистров....................................................140
Ошибки при использовании условных переходов...................140
Неверное понимание работы префикса REP........................140
Нулевое содержимое CX и работа с целым сегментом..............140
Неправильная установка флага направления......................141
Ошибки при повторении команд сравнения строк..................141
Ошибки при назначении сегмента строк..........................141
Неправильное преобразование из байта в слово..................141
Использование нескольких префиксов............................142
Необязательные операнды в командах обработки строк............142
Уничтожение содержимого регистра при умножении................142
Ошибки, связанные с изменением содержимого регистров..........143
Изменение состояния флага переноса............................143
Программист долго не использует флаги.........................143
Смешение операндов в памяти и непосредственных операндов......143
Ошибки, связанные с возвратом в начало сегмента...............143
Сохранение содержимого регистров при обработке прерываний.....144
Игнорирование групп в таблицах операндов и данных.............144
Проверка......................................................145
Проверка граничных условий и случаи ограничения...............145
TDeb 3.0 #2-3 = 5 =
Ввод ошибочных данных.........................................145
Отсутствие входных данных.....................................145
Отладка, как часть процесса создание программы................145
Пример сеанса отладки.........................................147
Сеанс отладки программы на языке Си...........................147
Поиск ошибок..................................................147
Разработка плана действий.....................................148
Запуск Турбо отладчика........................................148
Проверка......................................................149
Окно Watch....................................................151
Диалоговое окно Evaluate/Modify...............................151
Эврика!.......................................................151
Сеанс отладки с использованием программы на Паскале...........153
Поиск ошибок..................................................154
Выбор стратегии поиска ошибок.................................155
Запуск Турбо отладчика........................................155
Перемещение по программе......................................157
Диалоговое окно Evaluate/Modify...............................158
Проверка......................................................158
Выражения просмотра...........................................159
Следующая ошибка..............................................160
Глава 15. Виртуальная отладка с использованием процессора
80386........................................................162
Аппаратные средства, необходимые для виртуальной отладки......162
Установка драйвера устройства для виртуального отладчика......162
Запуск виртуального отладчика.................................163
Отличия обычной и виртуальной отладки.........................166
Замечания относительно возможных проблем......................166
Сообщения об ошибках TD386....................................167
Сообщения об ошибках TDH386.SYS...............................169
Глава 16. Отладка в защищенном режиме с использованием
TD386........................................................170
Аппаратура, необходимая для использования отладчика TD286.....170
Установка отладчика для защищенного режима....................170
Запуск отладчика для защищенного режима.......................171
Отличия Турбо отладчика и отладчика для защищенного режима....171
Отладка программ, использующих дополнительную память..........171
Выполнение TD286 на разных машинах............................171
TDeb 3.0 #2-3 = 6 =
Глава 9. Выражения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Выражения могут включать в себя идентификаторы вашей прог-
раммы (то есть имена переменных и подпрограмм), а также константы
и операции одного из поддерживаемых языков (Си, Паскаля или Ас-
семблера).
Турбо отладчик может вычислять выражения и сообщать вам зна-
чение результата. Выражения можно также использовать для ссылки
на элементы данных в памяти, значение которых вы хотите узнать.
Выражение можно вводить в ответ на любую подсказку, в которой
запрашивается значение адреса памяти. (Заметим, что в различных
языках выражения вычисляются по-разному.)
Для вычисления значения введенного выражения можно использо-
вать команду основного меню DataіEvaluate/Modify (ДанныеіВычисле-
ние/Модификация). Эту команду можно также использовать, как прос-
тейший калькулятор, а также для проверки значений объектов данных
в программе.
В данной главе мы расскажем вам о том, каким образом Турбо
отладчик определяет, какой язык нужно использовать для вычисления
выражения, и как задать использование конкретного языка. Мы опи-
шем элементы выражений, которые являются общими для всех языков,
такие, как номера исходных строк и доступ к регистрам процессора.
Затем мы опишем компоненты, которые входят в выражение на любом
языке, включая константы, переменные программы, строки и опера-
ции. Для каждого языка мы перечислим также поддерживаемые Турбо
отладчиком операции и опишем синтаксис выражений.
Полное описание выражений Си, Паскаля или Ассемблера содер-
жится в руководствах пользователя и справочных руководствах по
соответствующим языкам. (см. Borland C++ Getting started, Borland
C++ Programmers Guide, Turbo Pascal Users Guide, Turbo Pascal
Reference Guide, Turbo Assembler Reference Guide).
Выбор языка для вычисления выражения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Турбо отладчик обычно определяет, какой язык нужно использо-
вать для вычисления выражения, на основе расширения имени исход-
ного файла в текущем модуле. Это тот модуль, в котором останови-
лась ваша программа. Этот выбор можно отменить с помощью команды
OptionsіLanguage (ПараметрыіЯзык) и открытия диалогового окна
Expression Language (Язык для выражений), в котором вы можете с
помощью многопозиционного переключателя выбрать один из поддержи-
ваемых языков (Паскаль, Си или Ассемблер). Если вы выберете зна-
чение Source (Исходный), то выражения вычисляются в соответствии
с языком исходного файла (если Турбо отладчик не может определить
этот язык, он использует правила языка Ассемблера).
Обычно Турбо отладчик сам определяет используемый язык. Од-
TDeb 3.0 #2-3 = 7 =
нако, иногда полезно задать язык явным образом, например, если вы
отлаживаете вызываемый из других языков модуль Ассемблера. Явно
задав использование для вычисления выражений конкретного языка,
вы можете обращаться к данным так, как это делается в соответс-
твующем языке, даже если в текущем модуле используется другой
язык.
Иногда удобно интерпретировать выражение или переменную та-
ким образом, как если бы оно было написано на другом языке. Нап-
ример, при отладке программы Паскаля для изменения значения байта
в строке удобнее использовать соглашения Си или Ассемблера.
Если при запуске Турбо отладчика начальный выбор языка кор-
ректен, то при использовании соглашений других языков трудностей
не будет. Турбо отладчик сохраняет информацию о исходном языке и
выполняет соответствующее преобразование и запись данных. Если
язык не определен однозначно, Турбо отладчик использует Ассемб-
лер.
Даже если вы ошибочно зададите при входе в Турбо отладчик
неверный язык, он все равно сможет получить некоторую информацию
о языке на основе таблицы идентификаторов и исходного модуля. Од-
нако при некоторых обстоятельствах это может привести к тому, что
Турбо отладчик будет записывать данные некорректно.
Адреса кода, адреса данных и номера строк
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Обычно, когда нужно получить доступ к переменной или имени
подпрограммы в вашей программе, вы просто вводите ее имя. Однако
можно также вводить указатель, при вычислении которого получается
указатель на память, или задавать адреса кода в виде номеров ис-
ходных строк, указывая перед номером строки символ #, например,
#123 (только для Си и C++). В следующем разделе рассказывается,
как можно обращаться к идентификаторам, находящимся вне текущей
области действия.
Конечно, с помощью обычного синтаксиса вида "сегмент:смеще-
ние" вы можете задать шестнадцатиричный адрес:
ЪДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДї
і Язык і Формат і Пример і
ГДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДґ
і Си і Oxnnnn і Ox1234:Ox0010 і
і Паскаль і $nnnn і $1234:0010 і
і Ассемблер і nnnnh і 1234h:0B234h і
АДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДЩ
Доступ к идентификаторам вне текущей области действия
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Область, в которой Турбо отладчик ищет идентификатор, назы-
вается областью действия этого идентификатора. Доступ к идентифи-
TDeb 3.0 #2-3 = 8 =
каторам, лежащим за пределами текущей области действия, представ-
ляет собой сложное понятие, глубоко разбираться в котором в боль-
шинстве случаев использования отладчика нет необходимости.
Обычно Турбо отладчик ищет входящий в выражение идентифика-
тор точно так же, как это делает соответствующий компилятор. Нап-
ример, компилятор языка Си ищет его сначала в текущей функции,
затем в текущем модуле (статический идентификатор), а затем ищет
глобальный идентификатор. Компилятор Турбо Паскаля ищет идентифи-
катор сначала в текущей процедуре или функции, затем во "внеш-
ней" подпрограмме (если данная (активная) область действия вложе-
на в другую), затем в разделе реализации (inplementation)
текущего модуля, и, наконец, выполняет поиск глобального иденти-
фикатора.
Если Турбо отладчик не может найти идентификатор, используя
данные методы, то он ищет его во всех других модулях, пытаясь
найти соответствие среди статических идентификаторов. Это позво-
ляет вам ссылаться на идентификаторы в других модулях, не указы-
вая явно имени модуля.
|
adfun.ru
|
|
|
|