|
Часть 9
Глава 6. Анализ и модификация данных
В Турбо отладчике TDW предусмотрен уникальный и понятный способ для работы с данными вашей программы.
- Проверки (окна Inspector) позволяют вам проверить данные в том виде, как они содержатся в исходном файле. Вы можете смотреть, на что ссылаются указатели, просматривать массивы, а также структуры, записи и объединения в том виде, как вы их записали.
- Вы можете также поместить в окно Watches (Просмотр) переменные и выражения и наблюдать за изменением их значений по мере выполнения программы.
- Диалоговое окно Evaluate/Modify (Вычисление/Модификация) показывает содержимое любой переменной и позволяет вам присвоить ей новое значение.
В данной главе предполагается, что вы уже закомы с различными типами данных, которые могут встречаться в Турбо Паскале для Windows. Если вы работаете с языком недавно и еще не усвоили все типы данных, то в данной главе имеется также много ценной информац
ии об основных типах данных (char, integer, boolean, wordbool, word, real, с двойной и одинарной точностью, с плавающей точкой, строковых, длинных целых и т.д.). Когда вы подробнее познакомитесь с используемыми типами данных (указатели, записи, структуры
, объединения и т.д.), можно вернуться к данной главе и подробнее изучить, что можно делать с ними с помощью Турбо отладчика TDW.
В данной главе показывается также, как можно с помощью Турбо отладчика TDW проверять и модифицировать переменные программы. Сначала мы расскажем о меню Data (Данные) и его командах. Затем мы обсудим, как можно модифицировать данные программы с помощь
ю вычисления выражений, имеющих побочные эффекты. Наконец, мы покажем, как можно непосредственно ссылаться на элементы данных в ваших исходных модулях. Мы опишем также окно Watches (Просмотр) и те методы, которые используются для вывода основных типов да
нных каждого языка в окнах проверки (окна Inspector).
Примечание: Если вы хотите просматривать или изменять произвольные блоки памяти (в виде шестнадцатиричных байт данных), см. Главу 12, где рассказывается об отладке на уровне Ассемблера.
Меню Data
Меню Data (Данные) позволяет вам выбрать способ анализа и изменения данных программы. Вы можете вычислить выражение, изменить значение переменной и открыть окна проверок (Inspector) для вывода содержимого данных на экран.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Inspect... і Проверка
і Evaluate/Modify...Ctrl-F4і Вычисление/Модификация
і Add Watch... Ctrl-F7і Добавление выражения
і Function return і просмотра
АДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Возврат результата функции
Команда Inspect...
Команда Inspect (Проверка) выводит подсказку с запросом переменной, ссылающейся на данные, которые вы хотите проверить, а затем открывает окно Inspector (окно проверки), где выводится содержимое переменной программы или выражения. Вы можете вводить прост
ое имя переменной, или сложное выражение, если только оно ссылается на ячейку памяти и не сводится к константе.
Если при вводе данной команды курсор находится в области текста, то подсказка автоматически содержит имя переменной по месту расположения курсора (если она имеется). Если вы выбираете выражение в области текста (с помощью клавиши Ins), то подсказка содер
жит выбранное выражение.
Когда вы хотите проверить содержимое сложных структур данных, таких, как массивы или структуры, или связанный список записей, окна проверки могут вам очень помочь. Так как вы можете проверять данные внутри окна Inspector (Проверка), то "проходить" структ
уры данных программы можно также легко, как пролистывать исходный код программы в окне Module (Модуль).
Полное описание поведения окон Inspector содержится далее в разделе "Окна Inspector".
Команда Evaluate/Modify...
Команда Evaluate/Modify (Вычисление/Модификация) выводит подсказку (диалоговое окно) для ввода вычисляемого выражения (см. Рис. 6.1), затем вычисляет его (если вы выберите переключатель Eval - вычисление) так же, как это сделал бы компилятор.
Примечание: Вычисление выражений полностью обсуждается в Главе 9.
Если при вводе данной команды курсор находится в области текста, то в подсказке будет автоматически содержатся переменная, расположенная в том месте, где находится курсор (если она имеется). Если вы помечаете выражение с помощью клавиши Ins, то подсказка
(диалоговое окно) инициализируется отмеченным выражением.
ЪДДДДДДДДДДДДДДДДДДДДДEvaluate/ModifyДДДДДДДДДДДДДДДДї
і Expression Eval і
і °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° ±±±±±± і
і °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° і
і Cancel і
і Result ±±±±±± і
і °°°°°°°°°°°°°°°°°°°°°°°°° Help і
і ±±±±±± і
і New value Modify і
і °°°°°°°°°°°°°°°°°°°°°°°°° ±±±±±± і
і і
і і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рис. 6.1 Диалоговое окно Evaluate/Mofify
Expression - выражение; Result - результат; New value - новое значение; not avaliable - недоступно; Eval - вычислить; Cancel - отменить; Help - справка; Modify - модифицировать.
Нужно помнить о том, что после выражения, которое вы хотите просмотреть, можно добавить строку управления форматом. (О строке управления форматом рассказывается в Главе 9.) Этим полезно воспользоваться, когда вы хотите просмотреть что-либо, что выводится
в формате, отличном от используемого Турбо отладчиком TDW полчанию режима вывода на экран для этого типа данных. Для вывода результата в другом формате укажите после выражение разделитель-запятую (,), затем строку управления форматом.
Диалоговое окно содержит три области (поля). Выражение, которое вы хотите вычислить, можно ввести в верхней области. Это область ввода. Как и все другие подсказки ввода, эта область содержит протокол (выполняемых действий). В средней области выводится ре
зультат вычисления вашего выражения. Нижняя область - это область ввода, в которой вы можете ввести новое выражение для вычисления. Если выражение модифицировать нельзя, то в данное области выводится сообщение (недоступно).
Перемещаться между областями можно с помощью клавиш Tab и Shift-Tab (как и в других окнах, разбитых на области). То, что вы вводите в области New value (Новое значение), будет действовать после выбора переключателя Modify (Модификация). Если, находясь в
любой из областей, вы нажмете клавишу Esc, то окно подсказки будет удалено. Это можно сделать также с помощью кнопки "мыши".
Турбо отладчик TDW выводит данные в формате, соответствующем типу данных результата. Как мы уже упоминали, чтобы вывести результат в другом формате, после выражения нужно ввести запятую (разделитель), а затем строку управления форматом. Более подробно ст
роки управления форматом описываются в Главе 9.
Если строки данных слишком велики и не умещаются в поле результата, то они заканчиваются символом "Прокрутив" окно вправо, вы можете просмотреть остаток строки.
Если вы выполняете отладку объектно-ориентированных программ на или Паскале, то диалоговое окно Evaluate/Modify позволяет вам также вывести поля объекта или элементы экземпляров классов. Для каждого элемента, который может использоваться при вычислении з
аписи, можно использовать спецификатор формата.
При выполнении трассировки метода или функции элементов Турбо отладчик TDW знает об области действия и наличии параметра Self. C помощью спецификаторов и квалификаторов формата вы можете вычислить параметр Self (данный).
Примечание: Метод конструктора или деструктора в окне Evaluate вычислять нельзя.
Турбо отладчик TDW позволяет также вызывать метод или прямо из диалогового окна Evaluate/Modify (Вычисление/Модификация). Для этого просто наберите имя экземпляра метода, за которым следует точка, а затем имя метода или функции элементов с фактическими п
араметрами (либо пустые скобки, если параметров нет). При следующих описаниях:
type
Point = object
X, Y : Integer;
Visible : Boolean;
constructor Init(InitX, InitY : Integer);
destructor Done; virtual;
procedure Show; virtual;
procedure Hide; virtual;
procedure MoveTo(NewX, NewY, : integer);
end;
var
APoint : Point;
вы могли бы ввести в окне вычисления Турбо отладчика TDW любое из следующих выражений:
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Выражение Результат
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
APoint.X 5($5):Integer
APoint (5,23,FALSE):Point
APoint.MoveTo @6F4F:00BE
APoint.MoveTo(10,10) вызывается метод
MoveTo
APoint.Show() вызывается метод
Show
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Команда Add Watch...
Команда Add Watch (Добавление выражения просмотра) выводит подсказку для ввода выражения просмотра, а затем (если вы нажмете клавишу Enter или выберите переключатель OK) помещает выражение или переменную программы в список переменных, выводимых в окне Wa
tch (Просмотр).
Если при выборе данной команды курсор находится в области текта, то подсказка автоматически будет содержать переменную, находящуюся по месту расположения курсора (если она имеется). Если вы выбираете выражение (с помощью клавиши Ins), то подсказка содерж
ит выбранное выражение.
Команда Function Returns
По команде Function Returns (Результаты функции) выводится возвращаемое текущей функцией значение. Используйте эту команду только тогда, когда функция собирается передать значение в вызывающую программу.
Возвращаемое значение выводится в окне Inspector (Проверка), поэтому вы легко можете просмотреть значения, представляющие собой указатели на сложные объекты данных.
Данная команда позволяет вам не переходить в окно CPU (ЦП), когда требуется просмотреть возвращаемое через регистры процессора значение. Кроме того, поскольку вы примерно знаете тип данных и формат возвращаемого значения, их намного легче использовать, ч
ем шестнадцатиричный дамп.
Ссылка на элементы данных в исходных файлах
В Турбо отладчике TDW имеется мощный механизм, позволяющий избавить вас от необходимости каждый раз вводить имена переменных программы, которые вы хотите проверить. Находясь в окне Module (Модуль), вы можете поместить курсор где-либо в имени переменной и
использовать ее для создания окна проверки, где будет выведено содержимое этой переменной, команду локального меню Inspect (Проверка). Вы можете также выбрать проверяемое выражение с помощью нажатия клавиши Ins и использования клавиш управления курсором
для его подсветки, а затем выбрать команду Inspect (Проверка).
Примечание: Полное описание использования окон Module (Модуль) содержится в Главе 8.
Окно Watches
Окно наблюдения Watches (Просмотр) позволяет вам вывести список переменных и выражений программы, значения которых вы хотите отслеживать. Вы можете наблюдать значение простой переменной (например, целой), а также сложных элементов данных (например, масси
вов). Кроме того вы можете видеть значение вычисляемого выражения, которое не ссылается непосредственно ни на какой адрес в памяти, например x * y + 4.
Й[ю]ННН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)
ИІ°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°ДЅ
Рис. 6.2 Окно Watches
Для создания окна Watches выберите команду ViewіWatches (ОбзоріПросмотр). В нем выводится список переменных, значения которых вы хотите просматривать. Для каждой записи слева выводится имя переменной или выражение и тип данных, а справа - значение. Соста
вные значения (такие, как массивы или структуры) выводятся со значениями, заключенными в круглые скобки. Если не хватает места для того, чтобы вывести выражение целиком, то оно усекается.
Когда вы вводите просматриваемое выражение, можно свободно использовать имена переменных, которые еще не допустимы, так как находятся в функции, которая еще не была вызвана. Это позволяет вам задать выражение просмотра до того, как оно станет активным. В
Турбо отладчике TDW это единственный случай, когда вы можете ввести выражение, которое нельзя немедленно вычислить.
Предупреждение: Это означает, что если вы ошибетесь при вводе имени переменной, эта ошибка обнаружена не будет, так как Турбо отладчик вычисляет выражения в окне Watches (Просмотр) относительно области действия, того места в программе, где вы остановилис
ь.
Примечание: Полное описание области действия выражений и допустимости переменной или параметра содержится в Главе 9.
Следовательно, выражения в окне Watches имеют то значение, которое соответствует текущему месту в программе. Если выражение просмотра содержит имя переменной, которая недоступна в текущей области действия (например, если это частная переменная другого мо
дуля), то значение выражения будет не определено, а не экране выведутся четыре вопросительных знака (????).
При выполнении трассировки внутри метода объекта вы можете добавить в окно Watches параметр Self.
Локальное меню окна Watches
Как и все другие локальные меню, локальное меню окна Watches (Просмотр) выводится по нажатию оперативных клавиш Alt-F10. Если разрешено использовать сокращения с клавишей Ctrl, для доступа к нужной команде нажмите одновременно клавишу Ctrl и первую букву
команды.
ЪДДДДДДДДДДДДДДДї
і Watch... і Просмотр
і Edit... і Редактирование
і Remove і Удаление
і Delete All і Удалить все
іДДДДДДДДДДДДДДДі
і Inspect і Проверка
і Change і Изменение
АДДДДДДДДДДДДДДДЩ
Команда Watch...
Команда Watch (Просмотр) выводит подсказку для ввода имени переменной или выражения, чтобы добавить его к списку окна Watches (оно добавляется в конец списка).
Команда Edit...
Команда Edit (Редактирование) позволяет редактировать выражение в окне Watches (Просмотр). Вы можете изменять то, что там находится или вводить новое значение.
Вы можете также вызвать эту команду, нажав клавишу Enter после позиционирования подсветки на выражении просмотра, которое вы хотите изменить. Для помещения редактируемого выражения в окно просмотра нажмите Enter или выберите "кнопку" OK.
Команда Remove
Команда Remove (Удалить) из окна Watches текущую выбранную запись.
Команда Delete All
Команда Delete All (Удалить все) удаляет из окна Watches (Просмотр) все записи. Эту команду полезно использовать, если вы переходите от одной области вашей программы к другой, и переменные, наблюдаемые ранее, вам больше не нужны.
Команда Inspect
Команда Inspect (Проверка) открывает окно проверки (окно Inspector), в котором выводится содержимое подсвеченной в данный момент в окне Watches записи. Если эта запись представляет собой сложный объект (массив, структуру или запись), то это позволяет вам
просмотреть все ее элементы, а не только те, которые выводятся в окне Watches (Просмотр).
Примечание: Более подробно об окне Inspector рассказывается далее.
Команда Change
Команда Change (Изменение) изменяет значение подсвеченной в данный момент записи в окне Watches (Просмотр) на значение, которое вы вводите в ответ на подсказку. Если это допускается в используемом языке, Турбо отладчик TDW выполняет все необходимые прео
бразования типов, как это делалось бы в соответствующем операторе присваивания (:=).
Примечание: Более подробно об операции присваивания и преобразовании (приведении) типов рассказывается в Главе 9.
Окна Inspector
В окне Inspector (Проверка) выводятся соответствующим образом (в зависимости от типа проверяемых данных) данные программы. Для скалярных значений (например, char или integer), указателей (^ в Паскале), массивов (long x4[], array [1..10] of word), функций
, записей, и множеств окна проверки ведут себя по-разному.
В окне Inspector выводится список элементов, входящих в исследуемый объект данных. В заголовке окна выводится тип проверяемых данных и их имя, если оно имеется.
Первый элемент в окне Inspector всегда представляет собой адрес памяти проверяемого элемента данных, выраженный в виде "сегмент:смещение" (если он не оптимизирован к регистру или не представляет собой константу, например, 3).
Чтобы анализировать содержимое окна Inspector (Просмотр) в виде непосредственных байт данных, находясь в окне Inspector, выберите команду ViewіDump (ОбзоріДамп). При этом появится окно Dump (Дамп) с областью данных, позиционированной на данные, выведенны
е в окне Inspector. Вы можете вернуться в окно Inspector, выбрав окно с помощью команды WindowіClose (ОкноіЗакрытие) или клавиш Alt-F3, либо закрыв окно с помощью кнопки "мыши".
В следующем разделе описываются различные окна Inspector, которые могут выводиться для каждого из поддерживаемых Турбо отладчиком TDW языков (Паскаля или Ассемблера). Формат информации, выводимой в окнах проверки, зависит от используемого языка. Элементы
данных и их значения всегда выводятся в формате, аналогичном тому, как они описываются в исходном файле.
Учтите, что для вывода различных окон Inspector вам не нужно делать ничего особенного. Они выводятся автоматически, в зависимости от типа проверяемых вами данных.
Окна проверки данных для Паскаля
Скалярные величины
В окнах Inspector (Проверка) для скалярных значений выводятся значения простых элементов данных, например:
var
X : integer;
Y : longint;
В этих окнах Inspector содержится только одна строка информации, следующая за верхней строкой, где описывается адрес переменной. Слева выводится тип скалярной переменной (byte, word, integer, longint и т.д.), а справа - ее текущее значение. Значение може
т выводиться в десятичном, шестнадцатиричном или обоих видах. Оно обычно выводится сначала в десятичном виде, а шестнадцатиричное значение указывается в скобках (с помощью стандартного шестнадцатиричного префикса Турбо Паскаля $). Для изменения вида выво
да можно использовать программу TDWINST.
Если выводится переменная типа byte или shortint, то показывается также ее символьный эквивалент. Если данное значение не имеет эквивалента в виде печатаемого символа, то для вывода символьного значения используйте символ #, за которой следует шестна
дцатиричное значение. Символьное значение выводится перед десятичным или шестнадцатиричным значением.
Й[ю]НInspecting WordLenНННН3Н[][]Н»
є$595A:3EF0 є
єWORD±±±±±±±±±±±±±±±±±±±2±±($2)±±±±±є
ИІ°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°ДЅ
Рис. 6.3 Cкалярное окно Inspector (для Паскаля)
Указатели
Окно Inspector (Проверка) для указателей показывает значение элементов данных, которые ссылаются на другие элементы данных, например:
var
IP : ^integer;
LP : ^^pointer;
Обычно окно Inspector для указателей содержит только одну строку информации, следующую за верхней строкой, в которой описывается адрес переменной. Слева выводится [1], показывающее первый элемент массива. Справа выводится значение элемента, на который де
лается ссылка. Если значение представляет собой сложный элемент данных (например, запись или массив), то выводится максимум возможных данных, а значения заключаются в круглые скобки.
Если указатель имеет тип PChar и указывает на строку с завершающим нулем, то появляется информация, показывающая значение каждого элемента символьного массива. Слева от каждой строки выводится индекс ([1] ,[2] и т.д.), а справа - значение (как в скалярно
м окне Inspector). В этом случае вся строка выводится также не верхней строке, наряду с адресом переменной-указателя и адресом строки, на которую он указывает.
Вы можете также получить несколько строк, если откроете окно Inspector и дадите локальную команду Range (Диапазон), задав значение счетчика > 1.
Й[ю]НInspecting TempНН3ННН[][]»
є$8810:3EF4 : 8C10:0000 є
єPARM±±±±±±±±±±±±±±±±±±0003:7500є
єNEXT 5200:0000є
єІ°°°°°°°°°°°°°°°°°°°°°°°°°°°°є
єPARMRECPTR є
ИНННННННННННННННННННННННННННННННЅ
Рис. 6.4 Окно Inspector для указателей (для языка Паскаль)
Массивы
Окно Inspector (Проверка) для массивов показывает значение массивов элементов данных, таких, как:
var
A : array[1..10,1..20] of integer;
B : array[1..50] of boolean;
Каждому элементу массива в окне соответствует одна строка. В левой части каждой такой строки указывается индекс элемента, а справа - его текущее значение. Если это значение представляет собой сложный элемент данных, например, массив или запись, то выводи
тся максимально возможный объем информации, причем значения заключаются в круглые скобки.
Для проверки части любого массива можно использовать команду Range (Диапазон). Это полезно использовать, если массив содержит очень много элементов, а вы хотите просмотреть, например, середину массива.
Й[ю]НInspecting LetterTableНН3НН[][]ННН»
є$87D6:0058±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±є
є['A'] (2,2) є
є['B'] (2,0) є
є['C'] (2,0) є
є['D'] (2,2) є
є['D'] (2,0) є
є['E'] (2,0) є
є['F'] (2,0) є
єІ°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°є
єarray ['A'..'Z'] of record LINFOREC є
ИННННННННННННННННННННННННННННННННННННННННЅ
Рис. 6.5 Окно Inspector для массивов (для языка Паскаль)
Записи
В окнах Inspector (Проверка) для записи в программе на Паскале выводятся значения полей записи, например:
record
year : integer;
month : 1..12;
day : 1..31;
end
Ниже области, где выводятся значения полей, в этих окнах проверки имеется другая область, в которой выводится тип данных поля, подсвеченного в первой (верхней) области.
Й[ю]НInspecting LetterTable['A']Н4Н[][]»
є$87D6:0058±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±є
єCOUNT 2 ($2) є
єFIRSTLETTER 2 ($2) є
єІ°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°є
єLINFOREC є
ИННННННННННННННННННННННННННННННННННННННННЅ
Рис. 6.6 Окно Inspector для записи (для языка Паскаль)
Функции и процедуры
В окне Inspector для процедуры или функции выводится информация о параметрах вызова и возвращаемом процедурой или функцией типе данных, например:
function times2plus(a: integer, b: longint): longint
begin
times2plus := a * 2 + b);
end;
procedure
swap(var a,b :integer);
var
temp := a;
a := b;
b := a;
end;
Й[ю]НInspecting ProcessLineНН3Н[][]»
є$8340:0486±±±±±±±±±±±±±±±±±±±±±±±±±±є
єS : BUFFERSTR є
єІ°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°є
єPROCEDURE є
ИННННННННННННННННННННННННННННННННННННЅ
Рис. 6.7 Окно Inspector для процедуры (для языка Паскаль)
Окна проверки данных для Ассемблера
Скалярные величины
В окнах Inspector (Проверка) для скалярных значений выводятся значения простых элементов данных, например:
VAR1 DW 99
MAGIC DT 4.608
BIGNUM DD 123456
В этих окнах Inspector содержится только одна строка информации, следующая за верхней строкой, где описывается адрес переменной. Слева выводится тип скалярной переменной (byte, word, qworw, dword и т.д.), а справа - ее текущее значение. Значение может вы
водиться в десятичном, шестнадцатиричном или обоих видах. Оно обычно выводится сначала в десятичном виде, а шестнадцатиричное значение указывается в скобках (с помощью стандартного шестнадцатиричного постфикса Ассемблера H). Для изменения вида вывода мож
но использовать программу TDWINST.
Й[ю]НInspecting countНННН3НННННН[][]»
є$72ED:0019±±±±±±±±±±±±±±±±±±±±±±±±±±±є
єdword 18 (12h) є
ИІ°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Ѕ
Рис. 6.8 Cкалярное окно Inspector (для Ассемблера).
Если выводится переменная типа byte или shortint, то показывается также ее символьный эквивалент. Если данное значение не имеет эквивалента в виде печатаемого символа, то для вывода символьного значения используйте символ #, за которой следует шестна
дцатиричное значение. Символьное значение выводится перед десятичным или шестнадцатиричным значением.
Указатели
Окно Inspector (Проверка) для указателей показывает значение элементов данных, которые ссылаются на другие элементы данных, например:
X DW 0
XPTR DW X
FARPTR DD X
Обычно окно Inspector для указателей содержит только одну строку информации, следующую за верхней строкой, в которой описывается адрес переменной. Слева выводится значение [0], показывающее первый элемент массива. Справа выводится значение элемента, на к
оторый делается ссылка. Если значение представляет собой сложный элемент данных (например, структуру или массив), то выводится максимум возможных данных, а значения заключаются в квадратные скобки.
Если указатель байтового типа и указывает на завершающуюся нулем символьную строку, то выводится более подробная информация, показывающая значение каждого элемента в символьном массиве. Слева на каждой строке выводится индекс массива ([1], [2] и т.д.), а
справа - значение (как в скалярном окне Inspector). В этом случае вся строка выводится также в верхней строке окна, наряду с адресом переменной и адресом строки, на которую она указывает.
Вы можете также получить несколько строк, если откроете окно Inspector и дадите локальную команду Range (Диапазон), задав значение счетчика > 1.
Й[ю]НInspecting textptrННН3НН[][]»
є$72ED:0017±ds:000A±[#test#text]±±±
є[0] 'H' 72 (48h) І
є[1] 'e' 101 (65h) °
є[2] 'l' 108 (6Ch) °
є[3] 'l' 108 (6Ch) °
є[4] 'o' 111 (6Fh) °
є[5] ' ' 32 (20h) °
є[6] 'w' 87 (57h) °
є[7] 'o' 111 (6Fh) °
є[8] 'r' 114 (72h) °
є[9] 'l' 108 (6Ch) °
є[10] 'd' 100 (6Ch) °
є[11] '\x0D' 13 (0Dh) °
є[12] '\x0A' 10 (0Ah)
єІ°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°є
єbyte ptr є
ИННННННННННННННННННННННННННННННННННЅ
Рис. 6.9 Окно Inspector для указателей (для Ассемблера)
Массивы
Окно Inspector (Проверка) для массивов показывает значение массивов элементов данных, таких, как:
WARRAY DW 10 DUP (0)
MSG DB "Greetings",0
Каждому элементу массива в окне соответствует одна строка. В левой части каждой такой строки указывается индекс элемента, а справа - его текущее значение. Если это значение представляет собой сложный элемент данных, например, массив или запись, то выводи
тся максимально возможный объем информации, причем значения заключаются в квадратные скобки.
Й[ю]НInspecting TextННН3НН[][]»
є$72ED:000A±±±±±±±±±±±±±±±±±±±±±
є[0] 'h' 72 (46h) І
є[1] 'e' 101 (65h) °
є[2] 'l' 108 (6Ch) °
є[3] 'l' 108 (6Ch) °
є[4] 'o' 111 (6Fh) °
є[5] ',' 44 (6Ch)
єІ°°°°°°°°°°°°°°°°°°°°°°°°°°°°є
єbyte [12] є
ИНННННННННННННННННННННННННННННННЅ
Рис. 6.10 Окно Inspector для массивов (для Ассемблера)
Структуры и объединения
В окнах Inspector (Проверка) для структуры или объединения в программе на Ассемблере выводятся значения полей структуры или объединения, например:
X STRUC
MEM1 DB ?
MEM2 DD ?
X ENDS
ANX X <1,ANX>
Y UNION
ASBYTES DB 10 DUP (?)
ASFLT DT ?
Y ENDS
AY Y ,1.0>
Ниже области, где выводятся значения полей, в этих окнах проверки имеется другая область, в которой выводится тип данных поля, подсвеченного в первой (верхней) области.
Й[ю]НInspecting NamesНН3Н[][]»
є$72ED:001D±±±±±±±±±±±±±±±±±±±±є
єfirstname "Carleton " є
єlastname "Whitehall " є
єage '#' 35 (23h) є
єsex 'M' 77 (4Dh) є
єІ°°°°°°°°°°°°°°°°°°°°°°°°°°°є
єstruc namedata є
ИННННННННННННННННННННННННННННННЅ
Рис. 6.11 Окно Inspector для структуры (для Ассемблера)
Локальное меню окна Inspector
Команды локального меню окна Inspector (Проверка) показывают реальные возможности этого окна. Путем выбора данных команд вы можете, например, создавать другое окно проверки, позволяющее углубляться в структуры данных. Другие команды этого меню позволяют
вам проверить диапазон значений и проанализировать новую переменную.
Для вывода локального меню окна Inspector нажмите клавиши Alt-F10. Если разрешены сокращения для клавиши Ctrl, для доступа к нужной команде можно нажать клавишу Ctrl совместно с первой буквой этой команды.
ЪДДДДДДДДДДДДДДДДДДДї
Диапазон і Range... і
Изменение і Change... і
іДДДДДДДДДДДДДДДДДДДі
Проверка і Inspect і
Спуск і Descand і
Новое выражение і New Expression... і
Преобразование типа і Type cast... і
АДДДДДДДДДДДДДДДДДДДЩ
Команда Range...
Команда Range (Диапазон) задает начальный элемент и число элементов, которые вы хотите вывести на экран. Данную команду можно использовать при просмотре части массива (подмножества его элементов).
Если у вас есть длинный массив, и вы хотите просмотреть несколько элементов из его середины, то используйте эту команду для открытия окна проверки с тем индексом массива, который соответствует нужным элементам.
Команда Change...
Команда Change (Изменение) изменяет значение текущего (подсвеченного) элемента на то значение, которое вы введете в ответ на подсказку. Если данный язык это позволяет, Турбо отладчик TDW выполняет необходимое преобразование типов (это делается точно такж
е, как если бы для изменения значения переменной использовался оператор присваивания). Более подробно об операции присваивания и приведении типов рассказывается в Главе 9.
Команда Inspect
По команде Inspect (Проверка) открывается новое окно проверки (окно Inspector), в котором выводится содержимое текущего (подсвеченного) элемента. Эту команду полезно использовать, если элемент в окне Inspector содержит в себе другие элементы (является ст
руктурой или массивом), и вы хотите просмотреть каждый из этих элементов.
Если в текущем окне проверки выводится функция, то по команде Inspect выведется исходный код этой функции.
Данную команду можно вызвать, установив подсветку на тот элемент, который вы хотите просмотреть, и нажав клавишу Enter.
Вернуться к предыдущему окну Inspector (Проверка) можно с помощью клавиши Esc (по которой будет закрыто текущее окно проверки). Если вы завершили просмотр данных структуры и хотите удалить все окна проверки, то используйте команду WindowіClose (ОкноіЗакр
ытие) или ее сокращение, клавиши Alt-F3. Можно также использовать "мышь", установив указатель на пиктограмму закрытия окна и щелкнув кнопкой.
Команда Descend
Команда Descend (Спуск) работает аналогично команде локального меню Inspect (Проверка), но вместо открытия нового окна проверки для вывода содержимого подсвеченного элемента она помещает новый элемент в текущее окно проверки. Таким образом, данная команд
а как бы представляет собой гибрид команд New Expression (Новое выражение) и Inspect (Проверка).
Примечание: Когда вы углубляетесь в структуру данных, то вы не можете вернуться назад к предыдущей нерасширенной структуре данных. Эту команду нужно использовать при работе со сложными структурами данных или длинным связанным списком, если вам при этом н
е нужно возвращаться на предыдущий уровень данных. Это позволит уменьшить число выводимых на экран окон проверки.
Команда New Expression...
Команда New Expression (Новое выражение) выводит подсказку с запросом имени переменной или выражения, которые вы хотите проверить. Это позволяет вам проверять другие данные без вывода на экран дополнительных окон проверки. Используйте эту команду, если в
ас больше не интересуют данные в текущем окне проверки.
Окно Inspector для объектов Паскаля отличаются от обычных окон проверки. Описание окон проверки для типов объектов и классов содержится в Главе 10.
Команда Type Cast...
Команда Type Cast (Приведение типа) позволяет вам задать для проверяемого элемента другой тип данных (Byte, Word, Integer, указатель на Char, gh2fp, lh2fp). Это полезно использовать, если окно Inspector содержит идентификатор, для которого отсутствует ин
формация о типе, а также для явного задания типов нетипизованных указателей.
Примечание: О том как использовать типы gh2fp и lh2fp рассказывается в Главе 11.
|
|