Точки останова
В Turbo Debugger понятие точки останова включает в себя три
следующих элемента:
- место в программе (адрес), где находится точка останова;
- условие, при котором она срабатывает;
- что происходит, когда срабатывает точка останова (действие).
Адрес может представлять собой отдельный адрес в программе
или быть глобальным (при этом останов может происходить на любой
строке исходного кода или инструкции программы). Под условиями
могут подразумеваться следующие условия, когда происходит останов:
- всегда;
- когда выражение принимает истинное значение;
- когда объекты данных изменяют свое значение.
Можно также задавать "счетчик проходов", который определяет,
чтобы прежде чем сработает точка останова, "условие" должно принимать истинное значение определенное число раз.
При достижении точки останова может выполняться следующее
действие:
- приостановка выполнения программы;
- регистрация значения выражения;
- выполнение выражения;
- разрешение группы точек останова;
- запрещение группы точек останова.
Обычно точка останова устанавливается на конкретной исходной
строке или машинной инструкции программы. Когда программа достигает точки останова, Turbo Debugger вычисляет ее. Однако точки
останова могут быть и глобальными. Глобальные точки останова вычисляются отладчиком после выполнения каждой строки исходного кода или инструкции. Это позволяет определить момент модификации переменной или указателя.
Когда программа доходит до точки останова, Turbo Debugger
проверяет условия точки останова и проверяет истинность заданного
условия. Если условие выполняется, точка останова срабатывает.
Такая точка останова называется условной.
Окно Breakpoints
Создать окно точек останова Breakpoints можно с помощью команды View Breakpoints основного меню. Это дает вам способ выбора
и установки условий, при которых срабатывает точка останова. Это
окно можно использовать для добавления новых точек останова, отмены (удаления) точек останова и изменения существующих точек останова.
[*] Breakpoints 3 [^][v]
TCDEMO.220 Breakpoint
TCDEMO.225 Always
TCDEMO.226 Enabled
< >
В левой области этого окна показан список всех адресов, где
установлены точки останова. В правой области показаны подробные
данные по текущим (подсвеченным в левой области) точкам останова.
Локальное меню SpeedMenu окна Breakpoints можно получить по
нажатию клавиш Alt+F10. Команды данного меню позволяют вам добавлять новые точки останова, отменять существующие или изменять характер поведения имеющихся точек останова.
Установка простых точек останова
Когда вы впервые устанавливаете точку останова, Turbo Debugger создает по умолчанию простую точку останова. При достижении
такой точки останова программа всегда приостанавливает выполнение. Чтобы выполнить программу до точки останова, нажмите F9.
Простейшие методы установки простых точек останова предлагают окно Module и область Code окна CPU.
Если вы работаете с клавиатурой, поместите курсор на любую
выполняемую строку исходного кода или инструкцию в области кода
окна CPU и нажмите F2. То же самое можно сделать с помощью команды Breakpoint Toggle. После установки точки останова соответствующая строка становится красной. Для отмены точки останова нажмите F2.
При работе с "мышью" вы можете установить точку останова,
щелкнув на двух левых столбцах нужной строки. Повторный щелчок
"мышью" отменяет точку останова.
Кроме того, команда Breakpoinr At (Alt+F2) позволяет установить простую точку останова на текущей строке. Кроме того, эта
команда открывает диалоговое окно Breakpoint Options, которое
предоставляет быстрый доступ к командам настройки точки останова.
Кроме установки точке останова из окон Module и CPU, Turbo
Debugger предлагает для установки точек останова следующие команды. Чтобы установить простые точки останова на точках входа во
все функции текущего загруженного модуля или все функции-элементы
класса, используйте команду Group локального меню окна Breakpoints. Команда Add этого же меню также устанавливает точки останова. Она открывает диалоговое окно Breakpoint Options и позиционирует курсор на пустое поле ввода Address, где вы можете ввести
адрес или номер строки.
После установки точки останова вы можете модифицировать
действие, выполняемое по ее активизации. По умолчанию это "Break"
- Turbo Debugger приостанавливает выполнение программы. О других
действиях рассказывается ниже.
Установка условных точек останова
Эти точки останова также устанавливаются по конкретному адресу в программе, однако имеют специальные условия и связанные и
ними действия.
Иногда точку останова нежелательно активизировать при каждом
ее обнаружении, особенно когда содержащая ее строка выполняется
многократно. Не всегда также желательно приостанавливать программу на точке останова. В таких случаях используются условные точки
останова. Для создания условной точки останова можно выполнить
следующие шаги:
- Установите простую точку останова (как описано выше).
- Откройте диалоговое окно Conditions and Actions.
- Откройте окно точке останова и подсветите в области List
нужную точку останова.
- Выберите в SpeedMenu команду Set Options. Выводится диа логовое окно Breakpoint Options. Это окно содержит ко манды, позволяющие модифицировать параметры точек оста нова. Текущие параметры выбранной точки останова выво дятся в блоке списка Conditions and Actions&
- Чтобы модифицировать условие точки останова и выполняе мые по ней действия, щелкните "мышью" на командной кноп ке Change. Выводимое окно Conditions and Actions позво ляет вам настроить условия срабатывания точки останова и
выполняемые по ней действия.
- Выберите кнопку с зависимой фиксацией Expression True. По
умолчанию условие точек останова устанавливается в Always,
то есть они срабатывают каждый раз при обнаружении их в
программе. щелчок "мышью" на кнопке с зависимой фиксацией
Expression True задает активизацию точки останова только
после того, как заданное вами выражение станет истинным.
- В поле ввода Condition Expression введите выражение. Оно
будет вычисляться при каждом обнаружении точки останова.
- Если нужно, задайте для точки останова счетчик проходов
Pass Count. Это поле определяет, сколько раз должно удов летворяться условие точки останова, прежде чем точка оста нова будет активизирована. По умолчанию он равен 1. Значе ние счетчика уменьшается при каждом удовлетворении усло вия.
- Если вы хотите изменить выполняемое по умолчанию в точке
останова действие, щелкните "мышью" на нужно кнопке с за висимой фиксацией группы Action.
- Для выхода из окна щелкните "мышью" на OK или нажмите Esc.
Установка точек останова по изменению памяти
Эти точки останова отслеживают выражения, при вычислении которых получается объект памяти или адрес. Они активизируются при
изменении значения соответствующего объекта данных или указателя
памяти. Для установки такой точки останова нужно выполните те же
шаги, что и перечисленные выше, но
- В диалоговом окне Conditions and Actions вместо Expression
True щелкните "мышью" на кнопке с зависимой фиксацией
Changed Memory.
- В поле ввода Condition True введите выражение, при вычис лении которого получается объект памяти или адрес.
Когда ваша программа обнаруживает строку с такой точкой останова, условное выражение вычисляется перед выполнением этой
строки. Это нужно учитывать.
При вводе выражения вы можете также ввести счетчик числа
отслеживаемых объектов. Общее число отслеживаемых байт памяти
равно произведению размеру объекта, на которое ссылается выражение, на счетчик объекта.
Установка глобальных точек останова
Эти точки останова являются по существую точками останова
двух описанных выше типов, но отслеживаются они непрерывно в течении всего периода выполнения программы. Так как Turbo Debugger
проверяет такие точки останова после выполнения каждой инструкции
или строки исходного кода, они являются превосходным инструментом
выявления того места в программе, где происходит порча данных.
Чтобы создать глобальную точку останова, установите сначала
условную точку останова или точку останова по изменению памяти
(как описано выше), затем после выхода из окна Conditions and Actions включите кнопку с зависимой фиксацией Global диалогового
окна Breakpoint Options.
Поскольку глобальные точки останова не связываются с конкретными адресами программы, в поле ввода Address диалогового окна
Breakpoint Options выводится <not available>.
Чтобы глобальная точка останова проверялась после выполнения
каждой машинной инструкции, а не каждой строки исходного кода, в
активном окне CPU нажмите F9. Эти точки останова сильно замедляют
выполнение программы, поэтому использовать их нужно умеренно.
Кроме того, для них не рекомендуется задавать условие "Always".
Меню Breakpoint содержит команды для быстрой установки глобальных точек останова: Changed Memory Global и Expression True
Global. При этом по умолчанию выбирается действие "Break". Changed Memory Global устанавливает глобальную точку останова, активизируемую при изменении значения в памяти. Эта команда выводит
подсказку для задания соответствующей области памяти Enter Memory
Address и поле счетчика Count. Expression True Global устанавливает точку останова, срабатывающую при истинном значении заданного выражения.
Аппаратные точки останова
Эти точки останова доступны в TDW и TD32 при отладке программ Windows NT. Они используют специальные отладочные регистры
процессоров Intel 80386 и старше. Эти точки останова являются
глобальными. Для работы с этими точками останова вам потребуется
драйвер TDDEBUG.386. Скопируйте его с дистрибутивных диске и
включите в файл CONFIG.SYS. (Инструкции содержатся в файле
TD_HDWBP.TXT.) При правильной установке этого драйвера в поле
Breakpoints диалогового окна File Get Info выводится Hardware (в
противном случае - Software).
Чтобы установить аппаратную точку останова, выберите в меню
Breakpoints команду Hardware Breakpoint. Эта команда автоматически устанавливает кнопку Global окна Breakpoint Options, кнопку
Hardware в окне Conditions and Actions и открывает диалоговое окно Hardware Breakpoint Options. Это окно содержит все параметры
аппаратных точек останова и полностью описано в файле
TD_HDWBP.TXT.
Можно также создать аппаратную точку останова, модифицировав
существующую точку останова:
- Установите кнопку с независимой фиксацией Global в диало говом окне Options.
- Откройте диалоговое окно Conditions and Actions и выберите
кнопку с зависимой фиксацией Hardware.
- Чтобы открыть диалоговое окно Hardware Breakpoint Options,
щелкните "мышью" на кнопке Hardware окна Conditions and
Actions.
- Задайте параметры аппаратной точки останова и щелкните
"мышью" на OK.
- Если нужно, задайте в окне Conditions and Actions нужные
действия.
Действия, выполняемые по точкам останова
Кнопка с зависимой фиксацией Action в диалоговом окне Conditions and Actions позволяет задать действия, выполняемые по точке
останова.
Break |
Break приводит к тому, что при срабатывании точки останова
программа останавливается. Экран отладчика будет выведен заново,
и вы можете вводить команды для просмотра структур данных программы.
|
Execute |
Execute приводит к выполнению выражения (выражение запрашивается в поле ввода Action Expression). Выражение должно иметь
некоторые побочные эффекты, например, присваивание значения переменной. Эта возможность позволяет вам включить выражение, которое
будет выполняться перед кодом вашей программы в строке с текущим
номером ("вставка кода"). Такое средство полезно использовать,
когда вы хотите изменить поведение подпрограммы, чтобы проверить
"диагноз" или скорректировать ошибку. Это позволяет при проверке
минимальных изменений в программе не выполнять цикл компиляции и
компоновки.
|
Log |
Log приводит к тому, что значение выражения будет записано в
окне Log. Вам выводится подсказка. В ответ на нее вы должны ввести выражение, значение которого требуется зарегистрировать. Будьте внимательны, чтобы выражение не имело никаких неожиданных побочных эффектов.
|
Enable group |
Enable group позволяет вновь активизировать запрещенную ранее группу точек останова. Укажите в поле ввода Action Expression
номер группы.
|
Disable group |
Disable group позволяет запретить группу точек останова. При
запрещении группы точек останова они не стираются, а просто маскируются на время сеанса отладки. Укажите в поле ввода Action Expression номер группы.
|
Задание условий и действий
Для задания активизации точки останова и того, что должно
при этом происходить, используется окно Conditions and Actions.
Обычно для каждой конкретной точки останова задается одно условие
или выражение действия. Однако отладчик позволяет задавать несколько выражений. Кроме того, с одной точкой останова можно связать несколько условий и действий.
Чтобы задать набор условий, выберите кнопку с зависимой фиксацией Changed Memory of Expression, введите в поле ввода Condition Expression условие выберите кнопку Add под блоком ввода Condition Expression (если вводится несколько выражений, повторите
эти шаги). Кнопка Delete под полем Condition Expression позволяет
удалить из поля ввода Condition Expression текущее подсвеченное
выражение.
При выборе кнопки с зависимой фиксацией Execute, Log, Enable
Group или Disable Group в группе Action, то нужно задать набор
условий, по которым Turbo Debugger будет активизировать точку останова. Набор условий состоит из одного или более выражений. Чтобы задать их, выберите кнопку с зависимой фиксацией Execute,
Enable Group или Disable Group, введите действие в поле ввода Action Expression и выберите кнопку Add под полем ввода Action Expression. Чтобы при активизации точки останова выполнять более одного выражения, повторите эти шаги. При задании нескольких условий и действий они вычисляются в порядке их ввода.
При выборе кнопки Enable Group или Disable Group для ссылки
на группы точек останова, которые нужно разрешить или запретить,
наберите в поле Action Expression номер группы.
Кнопка Delete под полем Action Expression позволяет удалить
из набора действие текущее подсвеченное выражение. Закончив ввод
действий, выберите в диалоговом окне Condition Action командную
кнопку OK.
Условия и действия точки останова управляются заданными выражениями. Turbo Debugger вычисляет выражение точки останова относительно области действия того места, где находится точка останова. Используя синтаксис переопределения области действия, вы
можете обращаться к значениям любого определенного объекта данных, однако это замедляет вычисления.
Чтобы модифицировать точку останова в другом (не загруженном
в данный момент) модуле, используйте команду View Another Module.
Группы точек останова
Объединение точек останова в группы позволяет разрешать,
запрещать или удалять их одним действие. Кроме того, одной командой можно задать группу точек останова для всех функций (или
функций-элементов) модуля.
Команда Group в локальном меню окна Breakpoint активизирует
диалоговое окно Edit Breakpoint Groups, с помощью которого вы можете создать или модифицировать точки останова.
[*] Edit Breakpoint groups
Group
1 #BCDEMO#38 #BCDEMO#39 OK
3 #BCDEMO#40
Help
Add... Delete Enable Disable
Группа точек останова идентифицируется положительным целым
числом, которое автоматически генерируется отладчиком или назначается вами. Отладчик автоматически присваивает групповое число
каждой создаваемой точке останова. Генерируемый номер группы
представляет собой наименьший еще не использованный номер. Таким
образом, если номера 1, 2 и 5 уже используются группами, то следующей создаваемой точке останова автоматически присваивается номер группы 3. После создания точки останова вы можете модифицировать статус ее группы с помощью команды Breakpoint Groups.
Кнопка Add окна Edit Breakpoints активизирует диалоговое окно Add Group, содержащее один блок списка и набор кнопок с зависимой фиксацией. Блок списка Module/Class выводит список модуле или классов текущей программы. Посветите нужных модуль или класс
и выберите OK. Все устанавливаемые таким образом точки останова
объединяются в одну группу. Кнопка Delete удаляет подсвеченную
группу, а Enable/Disable разрешают или временно запрещают данную
группу.
Кнопки с зависимой фиксацией позволяют выбрать тип функций,
выводимых в блоке Module/Class: кнопка Modules выбирает все модули в текущей программе, а кнопка Classes - все ее классы.
Удаление точек останова
Удалить точки останова можно с помощью локального меню (SpeedMenu) окна Breakpoints или меню Breakpoints. Команда Remove меню окна Breakpoints или клавиша Del стирают точку останова, подсвеченную в области списка. Команда Delete All меню Breakpoint и
локального меню окна Breakpoints удаляют все установленные точки
останова.
Точку останова в шаблонах С++
Turbo Debugger поддерживает размещение точек останова в шаблонах С++, шаблонах функций и шаблонах экземпляров классов и объектов. Для установки таких точек останова используются следующие методы:
- Если точка останова устанавливается нажатием F2 в окне Module, то точки останова задаются для всех экземпляров классов в шаблонах. Это позволяет вам отладить поведение
шаблона.
- Если для установки точки останова в шаблоне используются
клавиши Alt+F2, то активизируется диалоговое окно Breakpoint Options, и в поле ввода Address вы можете задать адрес
шаблона. Открываемое диалоговое окно позволяет вам выбрать
конкретный экземпляр класса.
- Установить точку останова на конкретном экземпляре класса
шаблона можно также с помощью окна CPU. Позиционируйте
курсор на строке кода шаблона и нажмите F2.
Удаляются такие точки останова аналогично другим: позиционируйте курсор на точке останова в окне Module и нажмите F2. Удаляются все точки останова соответствующих экземпляров классов. Конкретные точки останова можно удалить с помощью окна CPU.
Установка точек останова в нитях
Программы для Windows NT состоят из одной или более выполняемых "нитей". При их отладки вы можете установит точки останова в
конкретных нитях, даже если этот код совместно используется несколькими нитями. По умолчанию точка останова в программе Windows
NT устанавливается во всех нитях программы. Чтобы установить ее
только в одной нити, сделайте следующее:
- Подсветите нужную точку останова в области списка окна Breakpoint.
- Выберите команду локального меню Set Options.
- Чтобы открыть диалоговое окно Copnditions and Actions,
щелкните "мышью" в на кнопке Change диалогового окна Breakpoint Options. Если нужно, установите для точки останова условия и действия. По умолчанию отмечается кнопка All
Threads - точки останова устанавливаются во всех активных нитях.
- Сбросьте установку All Threads. Становится доступным поле
ввода Threads. Наберите в этом поле номер нити Windows NT.
(Чтобы получить номер нити Windows NT, с помощью команды
View Thread откройте диалоговое окно Thread. В области
Threads List выводятся все активные нити.)
- Чтобы подтвердить установку, выберите командную кнопку OK.
Окно Log
Это окно отслеживает события, происходящие во время сеанса
отладки. Открывается оно по команде View Log и по умолчанию содержит до 50 строк текста (вы можете изменить это с помощью программы инсталляции).
[*] Log 3 [^][v]
At MCINPUT.124 ^
Breakpoint at TCDEMO.220
Breakpoint at TCDEMO.220
Breakpoint at TCDEMO.220
We are now entering procedure Params...
Breakpoint at TCDEMO.180 v
< >
В это окно записываются:
- адрес программы при ее приостановке;
- комментарий (при использовании команды Add Comment данного
окна);
- значение выражения, определенного для активизированной
точки останова;
- содержимое области или окна при выборе команды Edit Dump
to Log.
- информация о локальной и глобальной динамической распределяемой памяти или список программных модулей (при выборе
команды Display Windows Info локального меню данного окна);
- при установке в Yes параметра Send to Log Window окна Windows Messages в окно Log передаются все посылаемые данному
окну сообщения.
Команды SpeedMenu окна Log позволяют вам записывать журнал в
файл на диске, останавливать и начинать регистрацию, комментировать журнал, очищать его и записывать в него информацию о программе Windows.
Open Log File
|
Эта команда записывает на дик все записи, регистрируемые в
окне Log. Вам выводится подсказка для ввода имени файла на диске.
По умолчанию он имеет расширение .LOG, а его имя соответствует
имени программы. При открытии файла в него записываются все уже
зарегистрированные записи. Если это нежелательно, выберите сначала команду Erase Log.
|
Close Log File
|
Закрывает файл, открытый с помощью команды Open Log File.
|
Logging
|
Разрешает/запрещает запись событий в окно Log. Используется
для управления регистрацией событий.
|
Add Comment
|
Позволяет включить в окно Log комментарии. Открывает диалоговое окно с подсказкой для ввода комментария.
|
Erase Log
|
Очищает окно Log. Файл журнала на диске не изменяется.
|
Display Windows Info
|
Доступна только для TDW и выводит на экран окно Windows Information. Позволяет вывести информацию о динамически распределяемой памяти и список модуля приложения.
|
Анализ и модификация данных
Данные вашей программы - это глобальные и локальные переменные, а также определенные константы. Для проверки и модификации
данных в Turbo Debugger имеется ряд окон.
Окно Watches
Это окно обеспечивает самый простой способ отслеживания элементов данных программы. В нем вы можете просматривать переменные
и выражения, значения которых нужно отслеживать.
[*] Watches 2 [^][v]
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) v
< >
Это окно допускает просмотр значений как простых переменных,
так и составных объектов данных (например, массивов). Элементы
составных объектов выводятся в фигурных скобках ({}). Можно также
отслеживать выражения, не ссылающиеся непосредственно на память.
Отслеживаемые выражения перечисляются в левой части окна, соответствующие типы данных и значения - справа.
Чтобы задать отслеживаемые данные, выберите команду Data Add
Watch, либо команду Watch локального меню окна Module, Variable
или Watches. Turbo Debugger открывает диалоговое окно Enter Expression to Watch. Введите в нем имя переменной или выражение.
Если в окне Module курсор находится на переменной, то она
автоматические добавляется в окно Watch при выборе окна Wathes в
SpeedMenu. Это же относится к выражениям, выделенными с помощью
клавиш Ins и стрелок.
Если не переопределяется область действия, отладчик вычисляет выражения относительно текущего указателя команд. Если выражение содержит символ, недоступный в активной области действия, то выводятся символы ????. При вводе выражений вы можете использовать имена еще не определенных переменных, поэтому имена следует
вводить аккуратно (Turbo Debugger не распознает ошибок).
При трассировке внутри функции-элемента можно использовать
указатель this, который можно сопровождать спецификаторами формата и квантификаторами.
Меню окна Watches
SpeedMenu окна Wathes содержит все команды, необходимые для
работы с элементами окна.
Wathes
|
Эта команда выводит подсказку для ввода имени переменной или
выражения, добавляемого в окно Watches. Если не задается область
действия, оно вычисляется относительно текущей позиции курсора.
|
Edit
|
Открывает диалоговое окно Edit Watch Expression, позволяющее
вам модифицировать подсвеченное в окне Wathes выражение.
|
Remove
|
Удаляет из окна Watches подcвеченный элемент.
|
Delete All
|
Удаляет из окна Watches все выражения. Ее полезно использовать при при перемещении из одной области программы в другую.
|
Inspect
|
Открывает окно Inspector с детальной информацией по подсвеченному в окне Watch элементу. Ее полезно применять для просмотра сложного объекта данных.
|
Change
|
Модифицирует значение текущей подсвеченной в окне Wathes переменной. При вводе в диалоговом окне Enter New Value нового значения Turbo Debugger выполняет необходимое преобразование типа.
|
Окно Variables
В этом окне, которое открывается по команде View Variable,
показаны все локальные и глобальные переменные (с именами и значениями), доступные из текущего места программы. Его можно использовать, чтобы найти переменные, написание имен которых вы не помните. Для дальнейшего анализа или изменения их значений можно
использовать команды локальных меню. Это окно можно также использовать для проверки переменных, локальных по отношению к любой вызванной функции.
[*] Variables 3 [^][v]
TCDEMO.SHORESULTS @7129:01fA
TCDEMO.INIT @7129:0402
TCDEMO.PROCESSLINE @7129:04B5
TCDEMO.PARMSONHEAP @7129:0651
TCDEMO.NUMLINES 1 ($1)
TCDEMO.NUMWORDS 0 ($0)
< >
CH 'A'
ISLETTER True
S 'ABC DEF'
I 1 ($1)
WORDLEN 28969
Окно имеет две области. Область глобальных переменных (вверху), показывает все глобальные идентификаторы программы. Область
статических/локальных переменных (внизу) показывает все статические переменные (идентификаторы) текущего модуля. В обеих областях
выводится имя переменной (слева) и ее значение (справа). Если отладчик не может найти информации о типе данных идентификаторов,
то он выводит четыре вопросительных знака (????).
Меню окна Variables
Каждая область окна Variables имеет собственное SpeemMenu.
Оба меню содержат команды Inspect, Change и Wathes, а команда
Show имеется только в области локальных идентификаторов.
Inspect
| Открывает окно Inspector, где выводится содержимое подсвеченного идентификатора. В отличие от обычных окон Inspector, если
вы проверяете глобальную переменную, имя которой совпадает с именем локальной переменной, то Turbo Debugger выводит значение глобальной переменной. При проверке имени функции активизируется окно Module, а курсор перемещается на имя этой функции в исходном
коде (при его отсутствии выводится окно CPU).
|
Change
| Открывает диалоговое окно Change, в котором можно изменит
значение подсвеченного идентификатора.
|
Watch
| Открывает окно Watches и добавляет в него подсвеченный идентификатор. При этом не отслеживается, глобальная это переменная
или локальная. В блоке локальной переменной локальная переменная
имеет старшинство.
|
Show
| Выводит диалоговое окно Local Display. Кнопки с зависимой
фиксацией этого окна позволяют разрешить или изменить область
действия переменной в области локальных переменных.
|
|
Show | Показывать только статические переменные.
|
| Auto | Только переменные, локальные для текущего блока.
|
| Both | И статические, и локальные (по умолчанию).
|
| Module | Смена текущего модуля. Выводит диалоговое окно со
списком модулей программы.
|
Переменные стека
С помощью окна Stack вы можете проверить любые переменные
или функции, которые находятся в стеке (включая рекурсию). Для
этого откройте окно стека и подсветите проверяемую функцию. Затем
нажмите F10 и выберите Locals. Область Statis окна Variables показывает значения аргументов.
Окна Inspector
Эти окна предоставляют наилучший способ просмотра элементов
данных, так как они автоматически форматируются в соответствии с
типом данных. Их особенно полезно использовать при проверке сложных объектов данных (массивов или связанных списков). Чтобы просмотреть данные в шестнадцатиричном виде, в активном окне Inpsector используйте команду View Dump. Окна Inspector открываются из
команды Data Inspector или SpeedMenu окон Wathes, Variables или
Inspector.
При открытии окна Inspector выводится диалоговое окно Enter
Variable с подсказкой на ввод выражений. Введите имя переменной
или выражение. Если в момент команды Inspect курсор находится на
идентификаторе, или вы выделили выражение, то они автоматически
помещаются в поле ввода. Заголовок окна Inspector содержит проверяемое выражение.
Скалярное окно Inspector показывает значения простых элементов данных, таких как char, int или long. Оно содержит две строки: в первой указан адрес переменной, а вторая показывает ее тип и значение (в десятичном/шестнадцатиричном виде).
[*] Inspecting wordcount 3 [^][v]
05A51:AA00
unsigned int 2 (0x02)
< >
Окно Inspector для указателей выводит значения переменных,
указывающих на другие элементы данных. В верхней строке указывается адрес переменной, а далее следует детальная информация об
указываемых данных. В нижней области показывается тип этих данных.
[*] Inspecting bufp 3 [^][v]
register ds:0874 [TCDEMO buffer] ^
[0] 'n' 110 (Ox88)
[1] '0' 111 (Ox6F)
[2] 'w' 119 (Ox77)
< >
char *
Если указатель ссылается на сложный объект данных, значения
заключаются в фигурные скобки (выводится столько данных, сколько
можно показать). При ссылке на строку символов выводится каждый
элемент символьного массива с указанием индексов и значений. Команда Range позволяет выводить несколько строк информации.
Окна Inspector для структур и объединений показывают значения элементов в сложных объектах данных. Такое окно имеет две области. В верхней области выводится адрес объекта данных с перечислением имен и значений элементов данных объекта. Нижняя область содержит одну строку. Если вы в верхней области подсветите
адрес объекта данных, в нижне выводится тип объекта и его имя. В
противном случае там показывается тип элемента данных, подсвеченного в верхней области.
[*] Inspecting letterinfo[n] 3 [^][v]
$7937:0852 ^
count 2 (Ox2)
firstletter 2 (Ox2)
< >v
struct linfo
Область Inspector для массива показывает значения элементов
массива (каждому элементу соответствует строка). Слева выводится
индекс, справа - значение. Если значением является составной объект, Turbo Debugger выводит максимум данных объекта.
[*] Inspecting letterinfo 3 [^][v]
$7682:0852 ^
[0] {2,2}
[1] {2,0}
[2] {2,0}
[3] {1,1}
[4] {1,0}
< >
struct linfo [26]
Окно Inspector для функции показывает адрес функции, ее аргументы, а также возвращаемый функцией тип (в нижней области) и
соглашения по вызову.
[*] Inspecting analyzewords 3 [^][v]
071E9:02DD
char *bufp
< >
long ()
Меню окон Inspector
SpeedMenu окон Inspector содержит ряд полезных команд.
Range
| Задает начальный элемент и число элементов, которые нужно
просмотреть в массиве.
|
Change
| Позволяет изменить значение подсвеченного элемента на значение в окне Enter New Value. Необходимое приведение типа выполняется автоматически.
|
Inspect
| Открывает новое окно Inspector с элементом, подсвеченным в текущем окне Inspector. Используется для проверки составных объектов данных. Эту команду можно вызвать, подсветив элемент и нажав Enter. Если текущий элемент является функцией, то выводится окно Module. Для возврата в прежнее окно нажмите Esc. Чтобы закрыть все окна Inspector, дайте команду Window Close (Alt+F3).
|
Descend
| Эта команда работает аналогично команде Inspect локального меню, но она заменяет окно Inspector и выводит новые элементы. Это позволяет уменьшит число выводимых окон Inspector. Однако при использовании Descend для структуры данных вы не сможете вернуться к предыдущему просмотру.
|
New Expression
| Позволяет вам проверить другое выражение, которое замещает
данные в текущем окне Inspector.
|
Назад | Содержание | Вперед